Skip to main content
Glama

Server Details

Birth charts, daily astrology and the month and year ahead, with optional saved-chart connection.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
ChatGPT
–
Claude
–

TDQS

A4.1/5.0

Scored across 7 tools

Disambiguation4/5

The tools mostly have distinct purposes: temporary chart calculation, saved chart retrieval, daily focus, monthly/yearly timing, date comparison, and profile access. The closest overlap is calculate_chart vs get_chart and compare_dates vs the timing tools, but descriptions clarify saved versus temporary and comparison versus period listing.

Naming Consistency5/5

All tools use snake_case with a clear verb_noun pattern: calculate_chart, compare_dates, get_chart, get_daily_focus, get_profile, get_timing_month, get_timing_year. The get_daily_focus variant is still predictable and readable.

Tool Count5/5

Seven tools is well-scoped for a personal astrology reading server. Each tool maps to a distinct workflow: temporary chart, saved chart, profile, daily focus, date comparison, monthly timing, and annual timing.

Completeness4/5

The surface covers core chart, profile, daily, timing, and comparison workflows. Minor gaps exist around saving or managing temporary chart contexts and updating profile data, but most agent workflows are supported.

Available Tools

7 tools
calculate_chartCalculate my birth chartA
Read-onlyIdempotent
Inspect

Calculates an account-free temporary natal chart from supplied birth details. Birth date is required; omitted time and source default to unknown and unspecified. Optional time precision includes exact, approximate with explicit minutes, bounded_range and day_period. Optional birthplace is a historical city; calendarTimezone is a separate viewing timezone. Returns readable placements or sampled ranges and sensitive chartContext valid for two hours, or clarification data for ambiguous birth details. No profile, chart or analysis is saved.

NameRequiredDescriptionDefault
birthYes
calendarTimezoneNo

Output Schema

NameRequiredDescription
dataYes

TDQS

A3.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover read-only/idempotent/non-destructive, and the description adds genuinely non-obvious behavior: account-free operation, nothing persisted, the returned chartContext is sensitive and expires after two hours, and ambiguous birth details can yield clarification data instead of a chart. These are consequential runtime traits an agent could not infer from the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first sentence and every subsequent sentence carries distinct information. The middle sentences are heavily comma-and-semicolon-joined, compressing defaults, precision modes, place semantics and return behavior into run-ons that cost readability, plus the return-value sentence partly duplicates the output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a nested two-parameter schema with 0% description coverage plus an output schema and full annotations, the description covers the important surfaces: required field, defaults, time-precision variety, place vs. viewing timezone, non-persistence, and expiry. The main omission is any explanation of ambiguity resolution (disambiguation enum) despite advertising clarification data as a possible outcome.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description does real work: it names the time precision modes (exact, approximate with minutes, bounded_range, day_period), states that omitted time and timeSource default to unknown/unspecified, and distinguishes 'birthplace is a historical city' from 'calendarTimezone is a separate viewing timezone'. It leaves gaps, though: the disambiguation parameter (reject/earlier/later), place.countryCode and place.sourceRecordId, the separate birth 'timezone' field's relation to calendarTimezone, and the 720-minute cap on uncertaintyMinutes are all unaddressed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — 'Calculates an account-free temporary natal chart from supplied birth details' — with the scope-defining qualifiers 'account-free' and 'temporary'. The closing 'No profile, chart or analysis is saved' implicitly separates it from saved-chart siblings like get_chart, but that contrast is never made explicit by naming the sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description establishes prerequisites (birth date required, defaults for time/source) and implies the temporary/unsaved nature of the result, which nudges an agent toward the saved-chart siblings for follow-up. However, it never states when to choose this over get_chart or get_profile, and offers no explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compare_datesExplore specific datesA
Read-onlyIdempotent
Inspect

Returns a comparison of one to eight distinct civil dates from the same personal chart and sampled Calendar contacts. Supports temporary chartContext with a confirmed viewing timezone or the authorized saved self chart with full_timing access. Relative chart emphasis is not a favorable-outcome score or life-event probability. Equal scores do not identify a better date. Excludes saved events and conversations.

NameRequiredDescriptionDefault
datesYes
timezoneNoOptional confirmed viewing timezone (IANA identifier or UTC), separate from birthplace. Temporary charts require a supplied timezone when their context has none; saved charts retain the configured account timezone.
chartContextNoSensitive opaque temporary chart context. A supplied value selects the temporary chart; an absent value selects the authorized saved self chart. Valid for two hours in its issuing environment and calculation version.

Output Schema

NameRequiredDescription
dataYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this a read-only, idempotent, non-destructive closed-world call, so the safety profile is covered. The description adds genuinely useful interpretation guardrails beyond that: relative chart emphasis is not a favorable-outcome score or probability, and equal scores do not indicate a better date. Those caveats shape how an agent should present results and are not derivable from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The opening sentence front-loads what the tool returns, followed by access-mode conditions and then the interpretation caveats, which is a sensible order. Nearly every sentence earns its place, though the 'sampled Calendar contacts' clause is vague enough to read as filler rather than signal.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and the description covers access modes, scope limits, and score interpretation. What remains thin is precisely how dates are evaluated relative to each other and what 'relative chart emphasis' means in practice, but for a three-parameter read tool this is close to complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema coverage at 67%, the description usefully reinforces the 1-8 date cap and explains selection semantics the schema only partly covers: a supplied chartContext selects the temporary chart, an absent value selects the authorized saved self chart, and temporary charts require a timezone when their context lacks one. It stops short of clarifying date interpretation (e.g., civil-date vs. local time) beyond the schema's format pattern.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: a comparison of one to eight distinct civil dates from the same personal chart plus sampled Calendar contacts. That scope clearly separates it from siblings like get_daily_focus or get_timing_month, but the phrase 'sampled Calendar contacts' is left unexplained and could confuse an agent about what data is actually compared.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives prerequisites (temporary chartContext with a confirmed timezone vs. the authorized saved self chart with full_timing access) and an exclusion ('Excludes saved events and conversations'), which implies usage context. However, it never states when to pick this over get_daily_focus, get_timing_month, or get_timing_year, so the agent must infer the boundary itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_chartRead my birth chartA
Read-onlyIdempotent
Inspect

Returns the connected person's current saved natal chart, readable placements and birth-time uncertainty. Requires account authorization and chart access. Accepts no birth details or profile identifiers. Missing or stale saved charts produce an unavailable result.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
dataYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the safety profile is covered. The description adds genuinely new operational context: an auth/access prerequisite and the fact that missing or stale charts return an 'unavailable' result rather than erroring — useful preconditions the annotations don't convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, each carrying distinct information: payload contents, access precondition, input constraint, failure mode. Front-loaded with what is returned and zero filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return-shape detail is not required, and the description covers the remaining gaps an agent needs — auth requirement, no-input contract, and the unavailable-result edge case. Nothing material is missing for a zero-parameter read.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters sets the baseline at 4, and the description reinforces it by explicitly stating what is *not* accepted (birth details, profile identifiers), preventing an agent from inventing inputs. No further parameter semantics are needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — returns the connected person's *current saved* natal chart — and enumerates the payload (placements, birth-time uncertainty), which implicitly separates it from calculate_chart. It never names the sibling explicitly, so the distinction is inferred rather than declared.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear usage conditions: requires account authorization and chart access, and 'Accepts no birth details or profile identifiers' signals this is a read of stored state, not a computation. It stops short of naming an alternative (e.g. calculate_chart) for the case where no saved chart exists, leaving that routing to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_daily_focusExplore my Today readingA
Read-onlyIdempotent
Inspect

Returns today's personal chart contacts and deterministic reflection from the Novamris Today editorial catalog. Today resolves in the confirmed viewing or account timezone. Supports temporary chartContext and the authorized saved self chart without a full_timing entitlement. An absent editorial message is a valid result. Includes birth-time uncertainty and calculation limitations; chart contacts do not establish the person's feelings or future events.

NameRequiredDescriptionDefault
timezoneNoOptional confirmed viewing timezone (IANA identifier or UTC), separate from birthplace. Temporary charts require a supplied timezone when their context has none; saved charts retain the configured account timezone.
chartContextNoSensitive opaque temporary chart context. A supplied value selects the temporary chart; an absent value selects the authorized saved self chart. Valid for two hours in its issuing environment and calculation version.

Output Schema

NameRequiredDescription
dataYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds substantive context on top: timezone resolution rules, the two-hour/issuing-environment validity of chartContext, the fact that an absent editorial message is a valid result, and caveats about birth-time uncertainty and that contacts do not establish feelings or future events.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with the core action, then entitlement, empty-result, and caveat details. Slightly dense with domain jargon ('editorial catalog', 'chart contacts') but no filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers what an agent needs: output meaning, timezone resolution, entitlement limits, and valid-empty-result semantics, with an output schema handling return values. The disclaimers about birth-time uncertainty and non-predictive contacts fill the remaining gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are well documented in the schema itself. The description still adds value by explaining how the timezone default resolves (confirmed viewing/account timezone) and the either/or selection logic between temporary and saved charts.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: returns today's personal chart contacts plus a deterministic reflection drawn from the Novamris Today editorial catalog. It is clearly distinguishable from siblings like get_timing_month, compare_dates, and calculate_chart, which operate on other time spans or computations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description establishes the usage context: it works with either the temporary chartContext or the authorized saved self chart, and explicitly does not require a full_timing entitlement. It does not name alternative tools for non-today queries, so routing guidance is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_profileIdentify my connected accountA
Read-onlyIdempotent
Inspect

Returns the connected Novamris account's stable opaque identifier and optional display name for account recognition across reconnects. Requires account authorization and accepts no account selectors. Excludes email addresses and birth details.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
idYes
nameNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely new behavioral context: it requires account authorization and explicitly excludes email addresses and birth details, which preempts an agent trying to derive contact or PII from the response.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the return contract before the authorization and exclusion constraints. Every clause carries information an agent would otherwise have to guess at; nothing is padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only identity tool with an output schema and full annotation coverage, the description supplies the remaining essentials: auth requirement, no selectors, and explicit PII exclusions. An agent can call this correctly with no further information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters, so the baseline is 4. The description reinforces this with "accepts no account selectors," making clear that no identifying argument should be supplied — useful because an agent might otherwise assume it must pass an account ID.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ("Returns") and a specific resource ("the connected Novamris account's stable opaque identifier and optional display name"), leaving no ambiguity about output. It is unmistakably distinct from the sibling chart/timing tools, which all operate on astrological data rather than account identity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"for account recognition across reconnects" gives a clear situational trigger for calling it, and "accepts no account selectors" signals there is nothing to configure. It stops short of explicitly naming an alternative or a when-not-to-call condition, but no sibling plausibly competes for this job.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_timing_monthRead my monthA
Read-onlyIdempotent
Inspect

Returns a calendar month of personal astrology periods for a temporary chartContext or the authorized saved self chart. Saved access requires the full_timing entitlement; temporary access requires a confirmed viewing timezone unless already present in context. Relative months resolve in the viewing or account timezone. Both modes share calculation methods and coverage. Excludes saved life events and messages. Empty periods are not predictions of no life events.

NameRequiredDescriptionDefault
monthYesYYYY-MM, or this_month, next_month, previous_month resolved in the chart's viewing timezone.
timezoneNoOptional confirmed viewing timezone (IANA identifier or UTC), separate from birthplace. Temporary charts require a supplied timezone when their context has none; saved charts retain the configured account timezone.
chartContextNoSensitive opaque temporary chart context. A supplied value selects the temporary chart; an absent value selects the authorized saved self chart. Valid for two hours in its issuing environment and calculation version.

Output Schema

NameRequiredDescription
dataYes

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds substantial context beyond them: the full_timing entitlement gate, the timezone confirmation requirement, the two-hour lifetime of chartContext, and the scope exclusions for life events and messages. The closing caveat that empty periods are not predictions of no life events is exactly the kind of interpretation guard an agent could not infer from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Access conditions are front-loaded in the second and third sentences, and the exclusion and caveat sentences are short and load-bearing. 'Both modes share calculation methods and coverage' is the one sentence that borders on filler, keeping this off a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values needn't be explained. Given that, the description covers everything an agent needs to invoke correctly: mode selection, entitlement prerequisite, timezone requirement, chartContext lifetime, scope exclusions, and a caveat on interpreting empty results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters are already documented in the schema, setting the baseline at 3. The description reinforces the timezone resolution rule ('Relative months resolve in the viewing or account timezone') but adds no format or constraint detail beyond what the schema's own descriptions and patterns provide.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Returns a calendar month of personal astrology periods', with the two chart modes (temporary chartContext vs. authorized saved self chart) spelled out. The month-vs-year boundary with get_timing_year is implied by 'calendar month' but never made explicit, and get_daily_focus is not contrasted, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly explains the preconditions for each mode (full_timing entitlement for saved, a confirmed viewing timezone for temporary), which is real guidance. But it never states when to pick this tool over get_timing_year or get_daily_focus; the branching it describes is parameter-level, not tool-level, so the alternative-selection guidance is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_timing_yearRead my yearA
Read-onlyIdempotent
Inspect

Returns annual personal astrology periods for a temporary chartContext or the authorized saved self chart. Saved access requires full_timing; temporary access requires a confirmed viewing timezone. The reading field combines annual ranks 1–15, all calculated eclipse contacts and up to five remaining spans chronologically without duplicates. Conjunctive focus filters apply to all annual candidates. Annual and remaining ranks are separate symbolic measures, not probabilities. Most fast-planet transits are outside annual coverage; empty matches do not establish no chart contact or life event. Non-unique peaks and clipped boundaries remain explicit.

NameRequiredDescriptionDefault
yearYesCalendar year, or this_year, next_year, previous_year resolved in the chart's viewing timezone. Actual engine coverage is checked by Novamris.
focusNoOptional conjunctive filters over calculated annual candidates: movingBody, natalBody and technique (transit, return, eclipse_contact). Annual candidates exclude most fast-planet transits.
timezoneNoOptional confirmed viewing timezone (IANA identifier or UTC), separate from birthplace. Temporary charts require a supplied timezone when their context has none; saved charts retain the configured account timezone.
chartContextNoSensitive opaque temporary chart context. A supplied value selects the temporary chart; an absent value selects the authorized saved self chart. Valid for two hours in its issuing environment and calculation version.

Output Schema

NameRequiredDescription
dataYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the readOnly/idempotent annotations by disclosing permission prerequisites (full_timing), the timezone requirement for temporary charts, the exact composition of the reading field (ranks 1–15, eclipse contacts, up to five remaining spans, deduplicated), and interpretive caveats that ranks are not probabilities. It also sets expectations that empty matches do not prove no contact, which prevents an agent from over-reading results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose and access conditions, and every sentence carries information about coverage limits or result semantics. It is dense and slightly cramped, packing caveats into short clauses, but there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't explain return shapes, yet it explains the reading field's composition anyway and covers prerequisites and coverage limits. The remaining gap is error behavior when a year falls outside engine coverage, which is only vaguely hinted at in the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each of the four parameters is already documented, including the focus enum meanings and the chartContext selection rule; the description largely restates that the focus filters are conjunctive and that annual candidates exclude most fast-planet transits. Useful confirmation but little value added beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — 'Returns annual personal astrology periods' — with an explicit scope of temporary chartContext versus the authorized saved self chart, and it names the annual window, distinguishing it in substance from the monthly sibling. It stops short of naming get_timing_month as the alternative for finer granularity, so the differentiation is implied rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear conditional guidance on the two access paths: saved charts require full_timing, temporary charts require a confirmed viewing timezone. It does not state when an agent should prefer this tool over get_timing_month or calculate_chart, so there are no explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updates
    • Changedget_timing_month1 field changed
      • changedOutput schema / properties / data / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "algorithmVersion": {
        -        "maxLength": 100,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "availableFrom": {
        -        "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
        -        "type": "string"
        -      },
        -      "availableTo": {
        -        "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
        -        "type": "string"
        -      },
        -      "birthProfileVersion": {
        -        "maximum": 9007199254740991,
        -        "minimum": 1,
        -        "type": "integer"
        -      },
        -      "calculatedAt": {
        -        "format": "date-time",
        -        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -        "type": "string"
        -      },
        -      "days": {
        -        "items": {
        -          "additionalProperties": false,
        -          "properties": {
        -            "contacts": {
        -              "items": {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "aspect": {
        -                    "enum": [
        -                      "conjunction",
        -                      "sextile",
        -                      "square",
        -                      "trine",
        -                      "opposition"
        -                    ],
        -                    "type": "string"
        -                  },
        -                  "movingBody": {
        -                    "maxLength": 20,
        -                    "minLength": 1,
        -                    "type": "string"
        -                  },
        -                  "natalBody": {
        -                    "maxLength": 20,
        -                    "minLength": 1,
        -                    "type": "string"
        -                  },
        -                  "orbDegrees": {
        -                    "maximum": 3,
        -                    "minimum": 0,
        -                    "type": "number"
        -                  },
        -                  "relativeWeight": {
        -                    "maximum": 1,
        -                    "minimum": 0,
        -                    "type": "number"
        -                  },
        -                  "uncertaintyDegrees": {
        -                    "maximum": 3,
        -                    "minimum": 0,
        -                    "type": "number"
        -                  }
        -                },
        -                "required": [
        -                  "movingBody",
        -                  "natalBody",
        -                  "aspect",
        -                  "orbDegrees",
        -                  "uncertaintyDegrees",
        -                  "relativeWeight"
        -                ],
        -                "type": "object"
        -              },
        -              "maxItems": 3,
        -              "type": "array"
        -            },
        -            "localDate": {
        -              "format": "date",
        -              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -              "type": "string"
        -            },
        -            "relativeScore": {
        -              "maximum": 3,
        -              "minimum": 0,
        -              "type": "number"
        -            }
        -          },
        -          "required": [
        -            "localDate",
        -            "relativeScore",
        -            "contacts"
        -          ],
        -          "type": "object"
        -        },
        -        "maxItems": 31,
        -        "type": "array"
        -      },
        -      "interpretationNote": {
        -        "maxLength": 1000,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "sampled_timing_calendar",
        -        "type": "string"
        -      },
        -      "method": {
        -        "maxLength": 1000,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "month": {
        -        "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
        -        "type": "string"
        -      },
        -      "providerVersion": {
        -        "maxLength": 300,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "timezone": {
        -        "maxLength": 100,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "timezoneDataVersion": {
        -        "maxLength": 100,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "uncertainty": {
        -        "maxLength": 1000,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "windows": {
        -        "items": {
        -          "additionalProperties": false,
        -          "properties": {
        -            "contact": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "aspect": {
        -                  "enum": [
        -                    "conjunction",
        -                    "sextile",
        -                    "square",
        -                    "trine",
        -                    "opposition"
        -                  ],
        -                  "type": "string"
        -                },
        -                "movingBody": {
        -                  "maxLength": 20,
        -                  "minLength": 1,
        -                  "type": "string"
        -                },
        -                "natalBody": {
        -                  "maxLength": 20,
        -                  "minLength": 1,
        -                  "type": "string"
        -                },
        -                "orbDegrees": {
        -                  "maximum": 3,
        -                  "minimum": 0,
        -                  "type": "number"
        -                },
        -                "relativeWeight": {
        -                  "maximum": 1,
        -                  "minimum": 0,
        -                  "type": "number"
        -                },
        -                "uncertaintyDegrees": {
        -                  "maximum": 3,
        -                  "minimum": 0,
        -                  "type": "number"
        -                }
        -              },
        -              "required": [
        -                "movingBody",
        -                "natalBody",
        -                "aspect",
        -                "orbDegrees",
        -                "uncertaintyDegrees",
        -                "relativeWeight"
        -              ],
        -              "type": "object"
        -            },
        -            "contactKey": {
        -              "maxLength": 80,
        -              "minLength": 1,
        -              "type": "string"
        -            },
        -            "end": {
        -              "format": "date",
        -              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -              "type": "string"
        -            },
        -            "endClipped": {
        -              "type": "boolean"
        -            },
        -            "id": {
        -              "maxLength": 160,
        -              "minLength": 1,
        -              "type": "string"
        -            },
        -            "peak": {
        -              "format": "date",
        -              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -              "type": "string"
        -            },
        -            "peakIsUnique": {
        -              "type": "boolean"
        -            },
        -            "peakRelativeScore": {
        -              "maximum": 3,
        -              "minimum": 0,
        -              "type": "number"
        -            },
        -            "relativeLabel": {
        -              "maxLength": 100,
        -              "minLength": 1,
        -              "type": "string"
        -            },
        -            "relativeRatio": {
        -              "maximum": 1,
        -              "minimum": 0,
        -              "type": "number"
        -            },
        -            "start": {
        -              "format": "date",
        -              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -              "type": "string"
        -            },
        -            "startClipped": {
        -              "type": "boolean"
        -            },
        -            "title": {
        -              "maxLength": 200,
        -              "minLength": 1,
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "id",
        -            "start",
        -            "end",
        -            "peak",
        -            "peakIsUnique",
        -            "contactKey",
        -            "contact",
        -            "title",
        -            "peakRelativeScore",
        -            "relativeLabel",
        -            "relativeRatio",
        -            "startClipped",
        -            "endClipped"
        -          ],
        -          "type": "object"
        -        },
        -        "maxItems": 31,
        -        "type": "array"
        -      }
        -    },
        -    "required": [
        -      "birthProfileVersion",
        -      "month",
        -      "availableFrom",
        -      "availableTo",
        -      "timezone",
        -      "timezoneDataVersion",
        -      "providerVersion",
        -      "algorithmVersion",
        -      "calculatedAt",
        -      "days",
        -      "uncertainty",
        -      "method",
        -      "kind",
        -      "windows",
        -      "interpretationNote"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "algorithmVersion": {
        -        "maxLength": 100,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "availableFrom": {
        -        "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
        -        "type": "string"
        -      },
        -      "availableTo": {
        -        "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
        -        "type": "string"
        -      },
        -      "calculatedAt": {
        -        "format": "date-time",
        -        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -        "type": "string"
        -      },
        -      "days": {
        -        "items": {
        -          "additionalProperties": false,
        -          "properties": {
        -            "contacts": {
        -              "items": {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "aspect": {
        -                    "enum": [
        -                      "conjunction",
        -                      "sextile",
        -                      "square",
        -                      "trine",
        -                      "opposition"
        -                    ],
        -                    "type": "string"
        -                  },
        -                  "movingBody": {
        -                    "maxLength": 20,
        -                    "minLength": 1,
        -                    "type": "string"
        -                  },
        -                  "natalBody": {
        -                    "maxLength": 20,
        -                    "minLength": 1,
        -                    "type": "string"
        -                  },
        -                  "orbDegrees": {
        -                    "maximum": 3,
        -                    "minimum": 0,
        -                    "type": "number"
        -                  },
        -                  "relativeWeight": {
        -                    "maximum": 1,
        -                    "minimum": 0,
        -                    "type": "number"
        -                  },
        -                  "uncertaintyDegrees": {
        -                    "maximum": 3,
        -                    "minimum": 0,
        -                    "type": "number"
        -                  }
        -                },
        -                "required": [
        -                  "movingBody",
        -                  "natalBody",
        -                  "aspect",
        -                  "orbDegrees",
        -                  "uncertaintyDegrees",
        -                  "relativeWeight"
        -                ],
        -                "type": "object"
        -              },
        -              "maxItems": 3,
        -              "type": "array"
        -            },
        -            "localDate": {
        -              "format": "date",
        -              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -              "type": "string"
        -            },
        -            "relativeScore": {
        -              "maximum": 3,
        -              "minimum": 0,
        -              "type": "number"
        -            }
        -          },
        -          "required": [
        -            "localDate",
        -            "relativeScore",
        -            "contacts"
        -          ],
        -          "type": "object"
        -        },
        -        "maxItems": 31,
        -        "type": "array"
        -      },
        -      "interpretationNote": {
        -        "maxLength": 1000,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "kind": {
        -        "const": "sampled_timing_calendar",
        -        "type": "string"
        -      },
        -      "method": {
        -        "maxLength": 1000,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "month": {
        -        "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
        -        "type": "string"
        -      },
        -      "persistence": {
        -        "const": "no_profile_chart_or_analysis_saved",
        -        "type": "string"
        -      },
        -      "providerVersion": {
        -        "maxLength": 300,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "timezone": {
        -        "maxLength": 100,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "timezoneDataVersion": {
        -        "maxLength": 100,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "uncertainty": {
        -        "maxLength": 1000,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "windows": {
        -        "items": {
        -          "additionalProperties": false,
        -          "properties": {
        -            "contact": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "aspect": {
        -                  "enum": [
        -                    "conjunction",
        -                    "sextile",
        -                    "square",
        -                    "trine",
        -                    "opposition"
        -                  ],
        -                  "type": "string"
        -                },
        -                "movingBody": {
        -                  "maxLength": 20,
        -                  "minLength": 1,
        -                  "type": "string"
        -                },
        -                "natalBody": {
        -                  "maxLength": 20,
        -                  "minLength": 1,
        -                  "type": "string"
        -                },
        -                "orbDegrees": {
        -                  "maximum": 3,
        -                  "minimum": 0,
        -                  "type": "number"
        -                },
        -                "relativeWeight": {
        -                  "maximum": 1,
        -                  "minimum": 0,
        -                  "type": "number"
        -                },
        -                "uncertaintyDegrees": {
        -                  "maximum": 3,
        -                  "minimum": 0,
        -                  "type": "number"
        -                }
        -              },
        -              "required": [
        -                "movingBody",
        -                "natalBody",
        -                "aspect",
        -                "orbDegrees",
        -                "uncertaintyDegrees",
        -                "relativeWeight"
        -              ],
        -              "type": "object"
        -            },
        -            "contactKey": {
        -              "maxLength": 80,
        -              "minLength": 1,
        -              "type": "string"
        -            },
        -            "end": {
        -              "format": "date",
        -              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -              "type": "string"
        -            },
        -            "endClipped": {
        -              "type": "boolean"
        -            },
        -            "id": {
        -              "maxLength": 160,
        -              "minLength": 1,
        -              "type": "string"
        -            },
        -            "peak": {
        -              "format": "date",
        -              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -              "type": "string"
        -            },
        -            "peakIsUnique": {
        -              "type": "boolean"
        -            },
        -            "peakRelativeScore": {
        -              "maximum": 3,
        -              "minimum": 0,
        -              "type": "number"
        -            },
        -            "relativeLabel": {
        -              "maxLength": 100,
        -              "minLength": 1,
        -              "type": "string"
        -            },
        -            "relativeRatio": {
        -              "maximum": 1,
        -              "minimum": 0,
        -              "type": "number"
        -            },
        -            "start": {
        -              "format": "date",
        -              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -              "type": "string"
        -            },
        -            "startClipped": {
        -              "type": "boolean"
        -            },
        -            "title": {
        -              "maxLength": 200,
        -              "minLength": 1,
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "id",
        -            "start",
        -            "end",
        -            "peak",
        -            "peakIsUnique",
        -            "contactKey",
        -            "contact",
        -            "title",
        -            "peakRelativeScore",
        -            "relativeLabel",
        -            "relativeRatio",
        -            "startClipped",
        -            "endClipped"
        -          ],
        -          "type": "object"
        -        },
        -        "maxItems": 31,
        -        "type": "array"
        -      }
        -    },
        -    "required": [
        -      "month",
        -      "availableFrom",
        -      "availableTo",
        -      "timezone",
        -      "timezoneDataVersion",
        -      "providerVersion",
        -      "algorithmVersion",
        -      "calculatedAt",
        -      "days",
        -      "uncertainty",
        -      "method",
        -      "kind",
        -      "windows",
        -      "interpretationNote",
        -      "persistence"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "algorithmVersion": {
        +        "maxLength": 100,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "availableFrom": {
        +        "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
        +        "type": "string"
        +      },
        +      "availableTo": {
        +        "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
        +        "type": "string"
        +      },
        +      "birthProfileVersion": {
        +        "maximum": 9007199254740991,
        +        "minimum": 1,
        +        "type": "integer"
        +      },
        +      "calculatedAt": {
        +        "format": "date-time",
        +        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +        "type": "string"
        +      },
        +      "days": {
        +        "items": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "contacts": {
        +              "items": {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "aspect": {
        +                    "enum": [
        +                      "conjunction",
        +                      "sextile",
        +                      "square",
        +                      "trine",
        +                      "opposition"
        +                    ],
        +                    "type": "string"
        +                  },
        +                  "movingBody": {
        +                    "maxLength": 20,
        +                    "minLength": 1,
        +                    "type": "string"
        +                  },
        +                  "natalBody": {
        +                    "maxLength": 20,
        +                    "minLength": 1,
        +                    "type": "string"
        +                  },
        +                  "orbDegrees": {
        +                    "maximum": 3,
        +                    "minimum": 0,
        +                    "type": "number"
        +                  },
        +                  "relativeWeight": {
        +                    "maximum": 1,
        +                    "minimum": 0,
        +                    "type": "number"
        +                  },
        +                  "uncertaintyDegrees": {
        +                    "maximum": 3,
        +                    "minimum": 0,
        +                    "type": "number"
        +                  }
        +                },
        +                "required": [
        +                  "movingBody",
        +                  "natalBody",
        +                  "aspect",
        +                  "orbDegrees",
        +                  "uncertaintyDegrees",
        +                  "relativeWeight"
        +                ],
        +                "type": "object"
        +              },
        +              "maxItems": 3,
        +              "type": "array"
        +            },
        +            "localDate": {
        +              "format": "date",
        +              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +              "type": "string"
        +            },
        +            "relativeScore": {
        +              "maximum": 3,
        +              "minimum": 0,
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "localDate",
        +            "relativeScore",
        +            "contacts"
        +          ],
        +          "type": "object"
        +        },
        +        "maxItems": 31,
        +        "type": "array"
        +      },
        +      "interpretationNote": {
        +        "maxLength": 1000,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "sampled_timing_calendar",
        +        "type": "string"
        +      },
        +      "method": {
        +        "maxLength": 1000,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "month": {
        +        "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
        +        "type": "string"
        +      },
        +      "providerVersion": {
        +        "maxLength": 300,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "timezone": {
        +        "maxLength": 100,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "timezoneDataVersion": {
        +        "maxLength": 100,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "uncertainty": {
        +        "maxLength": 1000,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "windows": {
        +        "items": {
        +          "oneOf": [
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "contact": {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "aspect": {
        +                      "enum": [
        +                        "conjunction",
        +                        "sextile",
        +                        "square",
        +                        "trine",
        +                        "opposition"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    "movingBody": {
        +                      "maxLength": 20,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    "natalBody": {
        +                      "maxLength": 20,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    "orbDegrees": {
        +                      "maximum": 3,
        +                      "minimum": 0,
        +                      "type": "number"
        +                    },
        +                    "relativeWeight": {
        +                      "maximum": 1,
        +                      "minimum": 0,
        +                      "type": "number"
        +                    },
        +                    "uncertaintyDegrees": {
        +                      "maximum": 3,
        +                      "minimum": 0,
        +                      "type": "number"
        +                    }
        +                  },
        +                  "required": [
        +                    "movingBody",
        +                    "natalBody",
        +                    "aspect",
        +                    "orbDegrees",
        +                    "uncertaintyDegrees",
        +                    "relativeWeight"
        +                  ],
        +                  "type": "object"
        +                },
        +                "contactKey": {
        +                  "maxLength": 80,
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "end": {
        +                  "format": "date",
        +                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                  "type": "string"
        +                },
        +                "endClipped": {
        +                  "type": "boolean"
        +                },
        +                "id": {
        +                  "maxLength": 160,
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "peak": {
        +                  "format": "date",
        +                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                  "type": "string"
        +                },
        +                "peakIsUnique": {
        +                  "const": true,
        +                  "type": "boolean"
        +                },
        +                "peakRelativeScore": {
        +                  "maximum": 3,
        +                  "minimum": 0,
        +                  "type": "number"
        +                },
        +                "relativeLabel": {
        +                  "maxLength": 100,
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "relativeRatio": {
        +                  "maximum": 1,
        +                  "minimum": 0,
        +                  "type": "number"
        +                },
        +                "start": {
        +                  "format": "date",
        +                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                  "type": "string"
        +                },
        +                "startClipped": {
        +                  "type": "boolean"
        +                },
        +                "title": {
        +                  "maxLength": 200,
        +                  "minLength": 1,
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "id",
        +                "start",
        +                "end",
        +                "contactKey",
        +                "contact",
        +                "title",
        +                "peakRelativeScore",
        +                "relativeLabel",
        +                "relativeRatio",
        +                "startClipped",
        +                "endClipped",
        +                "peakIsUnique",
        +                "peak"
        +              ],
        +              "type": "object"
        +            },
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "contact": {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "aspect": {
        +                      "enum": [
        +                        "conjunction",
        +                        "sextile",
        +                        "square",
        +                        "trine",
        +                        "opposition"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    "movingBody": {
        +                      "maxLength": 20,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    "natalBody": {
        +                      "maxLength": 20,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    "orbDegrees": {
        +                      "maximum": 3,
        +                      "minimum": 0,
        +                      "type": "number"
        +                    },
        +                    "relativeWeight": {
        +                      "maximum": 1,
        +                      "minimum": 0,
        +                      "type": "number"
        +                    },
        +                    "uncertaintyDegrees": {
        +                      "maximum": 3,
        +                      "minimum": 0,
        +                      "type": "number"
        +                    }
        +                  },
        +                  "required": [
        +                    "movingBody",
        +                    "natalBody",
        +                    "aspect",
        +                    "orbDegrees",
        +                    "uncertaintyDegrees",
        +                    "relativeWeight"
        +                  ],
        +                  "type": "object"
        +                },
        +                "contactKey": {
        +                  "maxLength": 80,
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "end": {
        +                  "format": "date",
        +                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                  "type": "string"
        +                },
        +                "endClipped": {
        +                  "type": "boolean"
        +                },
        +                "id": {
        +                  "maxLength": 160,
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "peak": {
        +                  "type": "null"
        +                },
        +                "peakIsUnique": {
        +                  "const": false,
        +                  "type": "boolean"
        +                },
        +                "peakRelativeScore": {
        +                  "maximum": 3,
        +                  "minimum": 0,
        +                  "type": "number"
        +                },
        +                "relativeLabel": {
        +                  "maxLength": 100,
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "relativeRatio": {
        +                  "maximum": 1,
        +                  "minimum": 0,
        +                  "type": "number"
        +                },
        +                "start": {
        +                  "format": "date",
        +                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                  "type": "string"
        +                },
        +                "startClipped": {
        +                  "type": "boolean"
        +                },
        +                "title": {
        +                  "maxLength": 200,
        +                  "minLength": 1,
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "id",
        +                "start",
        +                "end",
        +                "contactKey",
        +                "contact",
        +                "title",
        +                "peakRelativeScore",
        +                "relativeLabel",
        +                "relativeRatio",
        +                "startClipped",
        +                "endClipped",
        +                "peakIsUnique",
        +                "peak"
        +              ],
        +              "type": "object"
        +            }
        +          ]
        +        },
        +        "maxItems": 31,
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "birthProfileVersion",
        +      "month",
        +      "availableFrom",
        +      "availableTo",
        +      "timezone",
        +      "timezoneDataVersion",
        +      "providerVersion",
        +      "algorithmVersion",
        +      "calculatedAt",
        +      "days",
        +      "uncertainty",
        +      "method",
        +      "kind",
        +      "windows",
        +      "interpretationNote"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "algorithmVersion": {
        +        "maxLength": 100,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "availableFrom": {
        +        "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
        +        "type": "string"
        +      },
        +      "availableTo": {
        +        "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
        +        "type": "string"
        +      },
        +      "calculatedAt": {
        +        "format": "date-time",
        +        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +        "type": "string"
        +      },
        +      "days": {
        +        "items": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "contacts": {
        +              "items": {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "aspect": {
        +                    "enum": [
        +                      "conjunction",
        +                      "sextile",
        +                      "square",
        +                      "trine",
        +                      "opposition"
        +                    ],
        +                    "type": "string"
        +                  },
        +                  "movingBody": {
        +                    "maxLength": 20,
        +                    "minLength": 1,
        +                    "type": "string"
        +                  },
        +                  "natalBody": {
        +                    "maxLength": 20,
        +                    "minLength": 1,
        +                    "type": "string"
        +                  },
        +                  "orbDegrees": {
        +                    "maximum": 3,
        +                    "minimum": 0,
        +                    "type": "number"
        +                  },
        +                  "relativeWeight": {
        +                    "maximum": 1,
        +                    "minimum": 0,
        +                    "type": "number"
        +                  },
        +                  "uncertaintyDegrees": {
        +                    "maximum": 3,
        +                    "minimum": 0,
        +                    "type": "number"
        +                  }
        +                },
        +                "required": [
        +                  "movingBody",
        +                  "natalBody",
        +                  "aspect",
        +                  "orbDegrees",
        +                  "uncertaintyDegrees",
        +                  "relativeWeight"
        +                ],
        +                "type": "object"
        +              },
        +              "maxItems": 3,
        +              "type": "array"
        +            },
        +            "localDate": {
        +              "format": "date",
        +              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +              "type": "string"
        +            },
        +            "relativeScore": {
        +              "maximum": 3,
        +              "minimum": 0,
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "localDate",
        +            "relativeScore",
        +            "contacts"
        +          ],
        +          "type": "object"
        +        },
        +        "maxItems": 31,
        +        "type": "array"
        +      },
        +      "interpretationNote": {
        +        "maxLength": 1000,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "kind": {
        +        "const": "sampled_timing_calendar",
        +        "type": "string"
        +      },
        +      "method": {
        +        "maxLength": 1000,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "month": {
        +        "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
        +        "type": "string"
        +      },
        +      "persistence": {
        +        "const": "no_profile_chart_or_analysis_saved",
        +        "type": "string"
        +      },
        +      "providerVersion": {
        +        "maxLength": 300,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "timezone": {
        +        "maxLength": 100,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "timezoneDataVersion": {
        +        "maxLength": 100,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "uncertainty": {
        +        "maxLength": 1000,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "windows": {
        +        "items": {
        +          "oneOf": [
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "contact": {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "aspect": {
        +                      "enum": [
        +                        "conjunction",
        +                        "sextile",
        +                        "square",
        +                        "trine",
        +                        "opposition"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    "movingBody": {
        +                      "maxLength": 20,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    "natalBody": {
        +                      "maxLength": 20,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    "orbDegrees": {
        +                      "maximum": 3,
        +                      "minimum": 0,
        +                      "type": "number"
        +                    },
        +                    "relativeWeight": {
        +                      "maximum": 1,
        +                      "minimum": 0,
        +                      "type": "number"
        +                    },
        +                    "uncertaintyDegrees": {
        +                      "maximum": 3,
        +                      "minimum": 0,
        +                      "type": "number"
        +                    }
        +                  },
        +                  "required": [
        +                    "movingBody",
        +                    "natalBody",
        +                    "aspect",
        +                    "orbDegrees",
        +                    "uncertaintyDegrees",
        +                    "relativeWeight"
        +                  ],
        +                  "type": "object"
        +                },
        +                "contactKey": {
        +                  "maxLength": 80,
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "end": {
        +                  "format": "date",
        +                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                  "type": "string"
        +                },
        +                "endClipped": {
        +                  "type": "boolean"
        +                },
        +                "id": {
        +                  "maxLength": 160,
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "peak": {
        +                  "format": "date",
        +                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                  "type": "string"
        +                },
        +                "peakIsUnique": {
        +                  "const": true,
        +                  "type": "boolean"
        +                },
        +                "peakRelativeScore": {
        +                  "maximum": 3,
        +                  "minimum": 0,
        +                  "type": "number"
        +                },
        +                "relativeLabel": {
        +                  "maxLength": 100,
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "relativeRatio": {
        +                  "maximum": 1,
        +                  "minimum": 0,
        +                  "type": "number"
        +                },
        +                "start": {
        +                  "format": "date",
        +                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                  "type": "string"
        +                },
        +                "startClipped": {
        +                  "type": "boolean"
        +                },
        +                "title": {
        +                  "maxLength": 200,
        +                  "minLength": 1,
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "id",
        +                "start",
        +                "end",
        +                "contactKey",
        +                "contact",
        +                "title",
        +                "peakRelativeScore",
        +                "relativeLabel",
        +                "relativeRatio",
        +                "startClipped",
        +                "endClipped",
        +                "peakIsUnique",
        +                "peak"
        +              ],
        +              "type": "object"
        +            },
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "contact": {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "aspect": {
        +                      "enum": [
        +                        "conjunction",
        +                        "sextile",
        +                        "square",
        +                        "trine",
        +                        "opposition"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    "movingBody": {
        +                      "maxLength": 20,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    "natalBody": {
        +                      "maxLength": 20,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    "orbDegrees": {
        +                      "maximum": 3,
        +                      "minimum": 0,
        +                      "type": "number"
        +                    },
        +                    "relativeWeight": {
        +                      "maximum": 1,
        +                      "minimum": 0,
        +                      "type": "number"
        +                    },
        +                    "uncertaintyDegrees": {
        +                      "maximum": 3,
        +                      "minimum": 0,
        +                      "type": "number"
        +                    }
        +                  },
        +                  "required": [
        +                    "movingBody",
        +                    "natalBody",
        +                    "aspect",
        +                    "orbDegrees",
        +                    "uncertaintyDegrees",
        +                    "relativeWeight"
        +                  ],
        +                  "type": "object"
        +                },
        +                "contactKey": {
        +                  "maxLength": 80,
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "end": {
        +                  "format": "date",
        +                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                  "type": "string"
        +                },
        +                "endClipped": {
        +                  "type": "boolean"
        +                },
        +                "id": {
        +                  "maxLength": 160,
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "peak": {
        +                  "type": "null"
        +                },
        +                "peakIsUnique": {
        +                  "const": false,
        +                  "type": "boolean"
        +                },
        +                "peakRelativeScore": {
        +                  "maximum": 3,
        +                  "minimum": 0,
        +                  "type": "number"
        +                },
        +                "relativeLabel": {
        +                  "maxLength": 100,
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "relativeRatio": {
        +                  "maximum": 1,
        +                  "minimum": 0,
        +                  "type": "number"
        +                },
        +                "start": {
        +                  "format": "date",
        +                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                  "type": "string"
        +                },
        +                "startClipped": {
        +                  "type": "boolean"
        +                },
        +                "title": {
        +                  "maxLength": 200,
        +                  "minLength": 1,
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "id",
        +                "start",
        +                "end",
        +                "contactKey",
        +                "contact",
        +                "title",
        +                "peakRelativeScore",
        +                "relativeLabel",
        +                "relativeRatio",
        +                "startClipped",
        +                "endClipped",
        +                "peakIsUnique",
        +                "peak"
        +              ],
        +              "type": "object"
        +            }
        +          ]
        +        },
        +        "maxItems": 31,
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "month",
        +      "availableFrom",
        +      "availableTo",
        +      "timezone",
        +      "timezoneDataVersion",
        +      "providerVersion",
        +      "algorithmVersion",
        +      "calculatedAt",
        +      "days",
        +      "uncertainty",
        +      "method",
        +      "kind",
        +      "windows",
        +      "interpretationNote",
        +      "persistence"
        +    ],
        +    "type": "object"
        +  }
        +]
    • Changedget_timing_year1 field changed
      • changedOutput schema / properties / data / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "algorithmVersion": {
        -        "maxLength": 100,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "birthProfileVersion": {
        -        "maximum": 9007199254740991,
        -        "minimum": 1,
        -        "type": "integer"
        -      },
        -      "calculatedAt": {
        -        "format": "date-time",
        -        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -        "type": "string"
        -      },
        -      "calendarAvailableTo": {
        -        "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
        -        "type": "string"
        -      },
        -      "coverage": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "availableFrom": {
        -            "format": "date",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -            "type": "string"
        -          },
        -          "availableTo": {
        -            "format": "date",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -            "type": "string"
        -          },
        -          "end": {
        -            "format": "date",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -            "type": "string"
        -          },
        -          "fullYear": {
        -            "type": "boolean"
        -          },
        -          "requestedEnd": {
        -            "format": "date",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -            "type": "string"
        -          },
        -          "requestedStart": {
        -            "format": "date",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -            "type": "string"
        -          },
        -          "start": {
        -            "format": "date",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "requestedStart",
        -          "requestedEnd",
        -          "start",
        -          "end",
        -          "fullYear",
        -          "availableFrom",
        -          "availableTo"
        -        ],
        -        "type": "object"
        -      },
        -      "interpretationNote": {
        -        "maxLength": 1000,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "method": {
        -        "maxLength": 1000,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "providerVersion": {
        -        "maxLength": 300,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "reading": {
        -        "additionalProperties": false,
        -        "description": "Expanded chronological overview or focused annual selection. With focus active, reading.windows contains every matching annual candidate; base windows and upcoming remain unfiltered context.",
        -        "properties": {
        -          "asOfDate": {
        -            "format": "date",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -            "type": "string"
        -          },
        -          "coverage": {
        -            "additionalProperties": false,
        -            "properties": {
        -              "availableFrom": {
        -                "format": "date",
        -                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -                "type": "string"
        -              },
        -              "availableTo": {
        -                "format": "date",
        -                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -                "type": "string"
        -              },
        -              "end": {
        -                "format": "date",
        -                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -                "type": "string"
        -              },
        -              "fullYear": {
        -                "type": "boolean"
        -              },
        -              "requestedEnd": {
        -                "format": "date",
        -                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -                "type": "string"
        -              },
        -              "requestedStart": {
        -                "format": "date",
        -                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -                "type": "string"
        -              },
        -              "start": {
        -                "format": "date",
        -                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "requestedStart",
        -              "requestedEnd",
        -              "start",
        -              "end",
        -              "fullYear",
        -              "availableFrom",
        -              "availableTo"
        -            ],
        -            "type": "object"
        -          },
        -          "focus": {
        -            "additionalProperties": false,
        -            "properties": {
        -              "movingBody": {
        -                "enum": [
        -                  "sun",
        -                  "moon",
        -                  "mercury",
        -                  "venus",
        -                  "mars",
        -                  "jupiter",
        -                  "saturn",
        -                  "uranus",
        -                  "neptune",
        -                  "pluto",
        -                  "true_node",
        -                  "solar_eclipse",
        -                  "lunar_eclipse"
        -                ],
        -                "type": "string"
        -              },
        -              "natalBody": {
        -                "enum": [
        -                  "sun",
        -                  "moon",
        -                  "mercury",
        -                  "venus",
        -                  "mars",
        -                  "jupiter",
        -                  "saturn",
        -                  "uranus",
        -                  "neptune",
        -                  "pluto",
        -                  "true_node",
        -                  "ascendant",
        -                  "midheaven"
        -                ],
        -                "type": "string"
        -              },
        -              "technique": {
        -                "enum": [
        -                  "transit",
        -                  "return",
        -                  "eclipse_contact"
        -                ],
        -                "type": "string"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          "mode": {
        -            "enum": [
        -              "overview",
        -              "focused"
        -            ],
        -            "type": "string"
        -          },
        -          "selectionNote": {
        -            "maxLength": 1000,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          "timezone": {
        -            "maxLength": 100,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          "timingLimit": {
        -            "maxLength": 1000,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          "totalMatches": {
        -            "maximum": 366,
        -            "minimum": 0,
        -            "type": "integer"
        -          },
        -          "uncertainty": {
        -            "maxLength": 1000,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          "windows": {
        -            "items": {
        -              "oneOf": [
        -                {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "annualRank": {
        -                      "maximum": 366,
        -                      "minimum": 1,
        -                      "type": "integer"
        -                    },
        -                    "contact": {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "aspect": {
        -                          "enum": [
        -                            "conjunction",
        -                            "sextile",
        -                            "square",
        -                            "trine",
        -                            "opposition"
        -                          ],
        -                          "type": "string"
        -                        },
        -                        "movingBody": {
        -                          "maxLength": 30,
        -                          "minLength": 1,
        -                          "type": "string"
        -                        },
        -                        "natalBody": {
        -                          "maxLength": 30,
        -                          "minLength": 1,
        -                          "type": "string"
        -                        }
        -                      },
        -                      "required": [
        -                        "movingBody",
        -                        "natalBody",
        -                        "aspect"
        -                      ],
        -                      "type": "object"
        -                    },
        -                    "end": {
        -                      "format": "date",
        -                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -                      "type": "string"
        -                    },
        -                    "endClipped": {
        -                      "type": "boolean"
        -                    },
        -                    "id": {
        -                      "maxLength": 160,
        -                      "minLength": 1,
        -                      "type": "string"
        -                    },
        -                    "peak": {
        -                      "format": "date",
        -                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -                      "type": "string"
        -                    },
        -                    "peakIsUnique": {
        -                      "const": true,
        -                      "type": "boolean"
        -                    },
        -                    "remainingRank": {
        -                      "anyOf": [
        -                        {
        -                          "maximum": 5,
        -                          "minimum": 1,
        -                          "type": "integer"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ]
        -                    },
        -                    "start": {
        -                      "format": "date",
        -                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -                      "type": "string"
        -                    },
        -                    "startClipped": {
        -                      "type": "boolean"
        -                    },
        -                    "technique": {
        -                      "enum": [
        -                        "transit",
        -                        "return",
        -                        "eclipse_contact"
        -                      ],
        -                      "type": "string"
        -                    },
        -                    "temporalStatus": {
        -                      "enum": [
        -                        "past",
        -                        "ongoing",
        -                        "future"
        -                      ],
        -                      "type": "string"
        -                    },
        -                    "title": {
        -                      "maxLength": 200,
        -                      "minLength": 1,
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "id",
        -                    "annualRank",
        -                    "remainingRank",
        -                    "temporalStatus",
        -                    "technique",
        -                    "title",
        -                    "contact",
        -                    "start",
        -                    "end",
        -                    "startClipped",
        -                    "endClipped",
        -                    "peakIsUnique",
        -                    "peak"
        -                  ],
        -                  "type": "object"
        -                },
        -                {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "annualRank": {
        -                      "maximum": 366,
        -                      "minimum": 1,
        -                      "type": "integer"
        -                    },
        -                    "contact": {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "aspect": {
        -                          "enum": [
        -                            "conjunction",
        -                            "sextile",
        -                            "square",
        -                            "trine",
        -                            "opposition"
        -                          ],
        -                          "type": "string"
        -                        },
        -                        "movingBody": {
        -                          "maxLength": 30,
        -                          "minLength": 1,
        -                          "type": "string"
        -                        },
        -                        "natalBody": {
        -                          "maxLength": 30,
        -                          "minLength": 1,
        -                          "type": "string"
        -                        }
        -                      },
        -                      "required": [
        -                        "movingBody",
        -                        "natalBody",
        -                        "aspect"
        -                      ],
        -                      "type": "object"
        -                    },
        -                    "end": {
        -                      "format": "date",
        -                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -                      "type": "string"
        -                    },
        -                    "endClipped": {
        -                      "type": "boolean"
        -                    },
        -                    "id": {
        -                      "maxLength": 160,
        -                      "minLength": 1,
        -                      "type": "string"
        -                    },
        -                    "peak": {
        -                      "type": "null"
        -                    },
        -                    "peakIsUnique": {
        -                      "const": false,
        -                      "type": "boolean"
        -                    },
        -                    "remainingRank": {
        -                      "anyOf": [
        -                        {
        -                          "maximum": 5,
        -                          "minimum": 1,
        -                          "type": "integer"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ]
        -                    },
        -                    "start": {
        -                      "format": "date",
        -                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -                      "type": "string"
        -                    },
        -                    "startClipped": {
        -                      "type": "boolean"
        -                    },
        -                    "technique": {
        -                      "enum": [
        -                        "transit",
        -                        "return",
        -                        "eclipse_contact"
        -                      ],
        -                      "type": "string"
        -                    },
        -                    "temporalStatus": {
        -                      "enum": [
        -                        "past",
        -                        "ongoing",
        -                        "future"
        -                      ],
        -                      "type": "string"
        -                    },
        -                    "title": {
        -                      "maxLength": 200,
        -                      "minLength": 1,
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "id",
        -                    "annualRank",
        -                    "remainingRank",
        -                    "temporalStatus",
        -                    "technique",
        -                    "title",
        -                    "contact",
        -                    "start",
        -                    "end",
        -                    "startClipped",
        -                    "endClipped",
        -                    "peakIsUnique",
        -                    "peak"
        -                  ],
        -                  "type": "object"
        -                }
        -              ]
        -            },
        -            "maxItems": 366,
        -            "type": "array"
        -          },
        -          "year": {
        -            "pattern": "^(19|20)\\d{2}$",
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "year",
        -          "timezone",
        -          "coverage",
        -          "uncertainty",
        -          "asOfDate",
        -          "windows",
        -          "timingLimit",
        -          "selectionNote",
        -          "mode"
        -        ],
        -        "type": "object"
        -      },
        -      "selectionVersion": {
        -        "maxLength": 100,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "timezone": {
        -        "maxLength": 100,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "timezoneDataVersion": {
        -        "maxLength": 100,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "totalDistinctWindows": {
        -        "maximum": 366,
        -        "minimum": 0,
        -        "type": "integer"
        -      },
        -      "uncertainty": {
        -        "maxLength": 1000,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "upcoming": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "asOfDate": {
        -            "format": "date",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -            "type": "string"
        -          },
        -          "totalDistinctWindows": {
        -            "maximum": 366,
        -            "minimum": 0,
        -            "type": "integer"
        -          },
        -          "windows": {
        -            "items": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "annualRank": {
        -                  "maximum": 366,
        -                  "minimum": 1,
        -                  "type": "integer"
        -                },
        -                "contact": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "aspect": {
        -                      "enum": [
        -                        "conjunction",
        -                        "sextile",
        -                        "square",
        -                        "trine",
        -                        "opposition"
        -                      ],
        -                      "type": "string"
        -                    },
        -                    "movingBody": {
        -                      "maxLength": 20,
        -                      "minLength": 1,
        -                      "type": "string"
        -                    },
        -                    "natalBody": {
        -                      "maxLength": 20,
        -                      "minLength": 1,
        -                      "type": "string"
        -                    },
        -                    "orbDegrees": {
        -                      "maximum": 3,
        -                      "minimum": 0,
        -                      "type": "number"
        -                    },
        -                    "relativeWeight": {
        -                      "maximum": 1,
        -                      "minimum": 0,
        -                      "type": "number"
        -                    },
        -                    "uncertaintyDegrees": {
        -                      "maximum": 3,
        -                      "minimum": 0,
        -                      "type": "number"
        -                    }
        -                  },
        -                  "required": [
        -                    "movingBody",
        -                    "natalBody",
        -                    "aspect",
        -                    "orbDegrees",
        -                    "uncertaintyDegrees",
        -                    "relativeWeight"
        -                  ],
        -                  "type": "object"
        -                },
        -                "contactKey": {
        -                  "maxLength": 80,
        -                  "minLength": 1,
        -                  "type": "string"
        -                },
        -                "end": {
        -                  "format": "date",
        -                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -                  "type": "string"
        -                },
        -                "endClipped": {
        -                  "type": "boolean"
        -                },
        -                "id": {
        -                  "maxLength": 160,
        -                  "minLength": 1,
        -                  "type": "string"
        -                },
        -                "peak": {
        -                  "format": "date",
        -                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -                  "type": "string"
        -                },
        -                "peakIsUnique": {
        -                  "type": "boolean"
        -                },
        -                "peakRelativeScore": {
        -                  "maximum": 3,
        -                  "minimum": 0,
        -                  "type": "number"
        -                },
        -                "rank": {
        -                  "maximum": 5,
        -                  "minimum": 1,
        -                  "type": "integer"
        -                },
        -                "relativeLabel": {
        -                  "maxLength": 100,
        -                  "minLength": 1,
        -                  "type": "string"
        -                },
        -                "relativeRatio": {
        -                  "maximum": 1,
        -                  "minimum": 0,
        -                  "type": "number"
        -                },
        -                "start": {
        -                  "format": "date",
        -                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -                  "type": "string"
        -                },
        -                "startClipped": {
        -                  "type": "boolean"
        -                },
        -                "title": {
        -                  "maxLength": 200,
        -                  "minLength": 1,
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "id",
        -                "rank",
        -                "start",
        -                "end",
        -                "peak",
        -                "peakIsUnique",
        -                "contactKey",
        -                "contact",
        -                "title",
        -                "peakRelativeScore",
        -                "relativeLabel",
        -                "relativeRatio",
        -                "startClipped",
        -                "endClipped",
        -                "annualRank"
        -              ],
        -              "type": "object"
        -            },
        -            "maxItems": 5,
        -            "type": "array"
        -          }
        -        },
        -        "required": [
        -          "asOfDate",
        -          "windows",
        -          "totalDistinctWindows"
        -        ],
        -        "type": "object"
        -      },
        -      "windows": {
        -        "items": {
        -          "additionalProperties": false,
        -          "properties": {
        -            "contact": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "aspect": {
        -                  "enum": [
        -                    "conjunction",
        -                    "sextile",
        -                    "square",
        -                    "trine",
        -                    "opposition"
        -                  ],
        -                  "type": "string"
        -                },
        -                "movingBody": {
        -                  "maxLength": 20,
        -                  "minLength": 1,
        -                  "type": "string"
        -                },
        -                "natalBody": {
        -                  "maxLength": 20,
        -                  "minLength": 1,
        -                  "type": "string"
        -                },
        -                "orbDegrees": {
        -                  "maximum": 3,
        -                  "minimum": 0,
        -                  "type": "number"
        -                },
        -                "relativeWeight": {
        -                  "maximum": 1,
        -                  "minimum": 0,
        -                  "type": "number"
        -                },
        -                "uncertaintyDegrees": {
        -                  "maximum": 3,
        -                  "minimum": 0,
        -                  "type": "number"
        -                }
        -              },
        -              "required": [
        -                "movingBody",
        -                "natalBody",
        -                "aspect",
        -                "orbDegrees",
        -                "uncertaintyDegrees",
        -                "relativeWeight"
        -              ],
        -              "type": "object"
        -            },
        -            "contactKey": {
        -              "maxLength": 80,
        -              "minLength": 1,
        -              "type": "string"
        -            },
        -            "end": {
        -              "format": "date",
        -              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -              "type": "string"
        -            },
        -            "endClipped": {
        -              "type": "boolean"
        -            },
        -            "id": {
        -              "maxLength": 160,
        -              "minLength": 1,
        -              "type": "string"
        -            },
        -            "peak": {
        -              "format": "date",
        -              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -              "type": "string"
        -            },
        -            "peakIsUnique": {
        -              "type": "boolean"
        -            },
        -            "peakRelativeScore": {
        -              "maximum": 3,
        -              "minimum": 0,
        -              "type": "number"
        -            },
        -            "rank": {
        -              "maximum": 5,
        -              "minimum": 1,
        -              "type": "integer"
        -            },
        -            "relativeLabel": {
        -              "maxLength": 100,
        -              "minLength": 1,
        -              "type": "string"
        -            },
        -            "relativeRatio": {
        -              "maximum": 1,
        -              "minimum": 0,
        -              "type": "number"
        -            },
        -            "start": {
        -              "format": "date",
        -              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -              "type": "string"
        -            },
        -            "startClipped": {
        -              "type": "boolean"
        -            },
        -            "title": {
        -              "maxLength": 200,
        -              "minLength": 1,
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "id",
        -            "rank",
        -            "start",
        -            "end",
        -            "peak",
        -            "peakIsUnique",
        -            "contactKey",
        -            "contact",
        -            "title",
        -            "peakRelativeScore",
        -            "relativeLabel",
        -            "relativeRatio",
        -            "startClipped",
        -            "endClipped"
        -          ],
        -          "type": "object"
        -        },
        -        "maxItems": 5,
        -        "type": "array"
        -      },
        -      "year": {
        -        "pattern": "^(19|20)\\d{2}$",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "birthProfileVersion",
        -      "year",
        -      "coverage",
        -      "calendarAvailableTo",
        -      "timezone",
        -      "timezoneDataVersion",
        -      "providerVersion",
        -      "algorithmVersion",
        -      "selectionVersion",
        -      "calculatedAt",
        -      "windows",
        -      "totalDistinctWindows",
        -      "uncertainty",
        -      "method",
        -      "interpretationNote",
        -      "upcoming"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "algorithmVersion": {
        -        "maxLength": 100,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "calculatedAt": {
        -        "format": "date-time",
        -        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        -        "type": "string"
        -      },
        -      "calendarAvailableTo": {
        -        "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
        -        "type": "string"
        -      },
        -      "coverage": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "availableFrom": {
        -            "format": "date",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -            "type": "string"
        -          },
        -          "availableTo": {
        -            "format": "date",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -            "type": "string"
        -          },
        -          "end": {
        -            "format": "date",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -            "type": "string"
        -          },
        -          "fullYear": {
        -            "type": "boolean"
        -          },
        -          "requestedEnd": {
        -            "format": "date",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -            "type": "string"
        -          },
        -          "requestedStart": {
        -            "format": "date",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -            "type": "string"
        -          },
        -          "start": {
        -            "format": "date",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "requestedStart",
        -          "requestedEnd",
        -          "start",
        -          "end",
        -          "fullYear",
        -          "availableFrom",
        -          "availableTo"
        -        ],
        -        "type": "object"
        -      },
        -      "interpretationNote": {
        -        "maxLength": 1000,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "method": {
        -        "maxLength": 1000,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "persistence": {
        -        "const": "no_profile_chart_or_analysis_saved",
        -        "type": "string"
        -      },
        -      "providerVersion": {
        -        "maxLength": 300,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "reading": {
        -        "additionalProperties": false,
        -        "description": "Expanded chronological overview or focused annual selection. With focus active, reading.windows contains every matching annual candidate; base windows and upcoming remain unfiltered context.",
        -        "properties": {
        -          "asOfDate": {
        -            "format": "date",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -            "type": "string"
        -          },
        -          "coverage": {
        -            "additionalProperties": false,
        -            "properties": {
        -              "availableFrom": {
        -                "format": "date",
        -                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -                "type": "string"
        -              },
        -              "availableTo": {
        -                "format": "date",
        -                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -                "type": "string"
        -              },
        -              "end": {
        -                "format": "date",
        -                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -                "type": "string"
        -              },
        -              "fullYear": {
        -                "type": "boolean"
        -              },
        -              "requestedEnd": {
        -                "format": "date",
        -                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -                "type": "string"
        -              },
        -              "requestedStart": {
        -                "format": "date",
        -                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -                "type": "string"
        -              },
        -              "start": {
        -                "format": "date",
        -                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "requestedStart",
        -              "requestedEnd",
        -              "start",
        -              "end",
        -              "fullYear",
        -              "availableFrom",
        -              "availableTo"
        -            ],
        -            "type": "object"
        -          },
        -          "focus": {
        -            "additionalProperties": false,
        -            "properties": {
        -              "movingBody": {
        -                "enum": [
        -                  "sun",
        -                  "moon",
        -                  "mercury",
        -                  "venus",
        -                  "mars",
        -                  "jupiter",
        -                  "saturn",
        -                  "uranus",
        -                  "neptune",
        -                  "pluto",
        -                  "true_node",
        -                  "solar_eclipse",
        -                  "lunar_eclipse"
        -                ],
        -                "type": "string"
        -              },
        -              "natalBody": {
        -                "enum": [
        -                  "sun",
        -                  "moon",
        -                  "mercury",
        -                  "venus",
        -                  "mars",
        -                  "jupiter",
        -                  "saturn",
        -                  "uranus",
        -                  "neptune",
        -                  "pluto",
        -                  "true_node",
        -                  "ascendant",
        -                  "midheaven"
        -                ],
        -                "type": "string"
        -              },
        -              "technique": {
        -                "enum": [
        -                  "transit",
        -                  "return",
        -                  "eclipse_contact"
        -                ],
        -                "type": "string"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          "mode": {
        -            "enum": [
        -              "overview",
        -              "focused"
        -            ],
        -            "type": "string"
        -          },
        -          "selectionNote": {
        -            "maxLength": 1000,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          "timezone": {
        -            "maxLength": 100,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          "timingLimit": {
        -            "maxLength": 1000,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          "totalMatches": {
        -            "maximum": 366,
        -            "minimum": 0,
        -            "type": "integer"
        -          },
        -          "uncertainty": {
        -            "maxLength": 1000,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          "windows": {
        -            "items": {
        -              "oneOf": [
        -                {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "annualRank": {
        -                      "maximum": 366,
        -                      "minimum": 1,
        -                      "type": "integer"
        -                    },
        -                    "contact": {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "aspect": {
        -                          "enum": [
        -                            "conjunction",
        -                            "sextile",
        -                            "square",
        -                            "trine",
        -                            "opposition"
        -                          ],
        -                          "type": "string"
        -                        },
        -                        "movingBody": {
        -                          "maxLength": 30,
        -                          "minLength": 1,
        -                          "type": "string"
        -                        },
        -                        "natalBody": {
        -                          "maxLength": 30,
        -                          "minLength": 1,
        -                          "type": "string"
        -                        }
        -                      },
        -                      "required": [
        -                        "movingBody",
        -                        "natalBody",
        -                        "aspect"
        -                      ],
        -                      "type": "object"
        -                    },
        -                    "end": {
        -                      "format": "date",
        -                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -                      "type": "string"
        -                    },
        -                    "endClipped": {
        -                      "type": "boolean"
        -                    },
        -                    "id": {
        -                      "maxLength": 160,
        -                      "minLength": 1,
        -                      "type": "string"
        -                    },
        -                    "peak": {
        -                      "format": "date",
        -                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -                      "type": "string"
        -                    },
        -                    "peakIsUnique": {
        -                      "const": true,
        -                      "type": "boolean"
        -                    },
        -                    "remainingRank": {
        -                      "anyOf": [
        -                        {
        -                          "maximum": 5,
        -                          "minimum": 1,
        -                          "type": "integer"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ]
        -                    },
        -                    "start": {
        -                      "format": "date",
        -                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -                      "type": "string"
        -                    },
        -                    "startClipped": {
        -                      "type": "boolean"
        -                    },
        -                    "technique": {
        -                      "enum": [
        -                        "transit",
        -                        "return",
        -                        "eclipse_contact"
        -                      ],
        -                      "type": "string"
        -                    },
        -                    "temporalStatus": {
        -                      "enum": [
        -                        "past",
        -                        "ongoing",
        -                        "future"
        -                      ],
        -                      "type": "string"
        -                    },
        -                    "title": {
        -                      "maxLength": 200,
        -                      "minLength": 1,
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "id",
        -                    "annualRank",
        -                    "remainingRank",
        -                    "temporalStatus",
        -                    "technique",
        -                    "title",
        -                    "contact",
        -                    "start",
        -                    "end",
        -                    "startClipped",
        -                    "endClipped",
        -                    "peakIsUnique",
        -                    "peak"
        -                  ],
        -                  "type": "object"
        -                },
        -                {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "annualRank": {
        -                      "maximum": 366,
        -                      "minimum": 1,
        -                      "type": "integer"
        -                    },
        -                    "contact": {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "aspect": {
        -                          "enum": [
        -                            "conjunction",
        -                            "sextile",
        -                            "square",
        -                            "trine",
        -                            "opposition"
        -                          ],
        -                          "type": "string"
        -                        },
        -                        "movingBody": {
        -                          "maxLength": 30,
        -                          "minLength": 1,
        -                          "type": "string"
        -                        },
        -                        "natalBody": {
        -                          "maxLength": 30,
        -                          "minLength": 1,
        -                          "type": "string"
        -                        }
        -                      },
        -                      "required": [
        -                        "movingBody",
        -                        "natalBody",
        -                        "aspect"
        -                      ],
        -                      "type": "object"
        -                    },
        -                    "end": {
        -                      "format": "date",
        -                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -                      "type": "string"
        -                    },
        -                    "endClipped": {
        -                      "type": "boolean"
        -                    },
        -                    "id": {
        -                      "maxLength": 160,
        -                      "minLength": 1,
        -                      "type": "string"
        -                    },
        -                    "peak": {
        -                      "type": "null"
        -                    },
        -                    "peakIsUnique": {
        -                      "const": false,
        -                      "type": "boolean"
        -                    },
        -                    "remainingRank": {
        -                      "anyOf": [
        -                        {
        -                          "maximum": 5,
        -                          "minimum": 1,
        -                          "type": "integer"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ]
        -                    },
        -                    "start": {
        -                      "format": "date",
        -                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -                      "type": "string"
        -                    },
        -                    "startClipped": {
        -                      "type": "boolean"
        -                    },
        -                    "technique": {
        -                      "enum": [
        -                        "transit",
        -                        "return",
        -                        "eclipse_contact"
        -                      ],
        -                      "type": "string"
        -                    },
        -                    "temporalStatus": {
        -                      "enum": [
        -                        "past",
        -                        "ongoing",
        -                        "future"
        -                      ],
        -                      "type": "string"
        -                    },
        -                    "title": {
        -                      "maxLength": 200,
        -                      "minLength": 1,
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "id",
        -                    "annualRank",
        -                    "remainingRank",
        -                    "temporalStatus",
        -                    "technique",
        -                    "title",
        -                    "contact",
        -                    "start",
        -                    "end",
        -                    "startClipped",
        -                    "endClipped",
        -                    "peakIsUnique",
        -                    "peak"
        -                  ],
        -                  "type": "object"
        -                }
        -              ]
        -            },
        -            "maxItems": 366,
        -            "type": "array"
        -          },
        -          "year": {
        -            "pattern": "^(19|20)\\d{2}$",
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "year",
        -          "timezone",
        -          "coverage",
        -          "uncertainty",
        -          "asOfDate",
        -          "windows",
        -          "timingLimit",
        -          "selectionNote",
        -          "mode"
        -        ],
        -        "type": "object"
        -      },
        -      "selectionVersion": {
        -        "maxLength": 100,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "timezone": {
        -        "maxLength": 100,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "timezoneDataVersion": {
        -        "maxLength": 100,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "totalDistinctWindows": {
        -        "maximum": 366,
        -        "minimum": 0,
        -        "type": "integer"
        -      },
        -      "uncertainty": {
        -        "maxLength": 1000,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "upcoming": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "asOfDate": {
        -            "format": "date",
        -            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -            "type": "string"
        -          },
        -          "totalDistinctWindows": {
        -            "maximum": 366,
        -            "minimum": 0,
        -            "type": "integer"
        -          },
        -          "windows": {
        -            "items": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "annualRank": {
        -                  "maximum": 366,
        -                  "minimum": 1,
        -                  "type": "integer"
        -                },
        -                "contact": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "aspect": {
        -                      "enum": [
        -                        "conjunction",
        -                        "sextile",
        -                        "square",
        -                        "trine",
        -                        "opposition"
        -                      ],
        -                      "type": "string"
        -                    },
        -                    "movingBody": {
        -                      "maxLength": 20,
        -                      "minLength": 1,
        -                      "type": "string"
        -                    },
        -                    "natalBody": {
        -                      "maxLength": 20,
        -                      "minLength": 1,
        -                      "type": "string"
        -                    },
        -                    "orbDegrees": {
        -                      "maximum": 3,
        -                      "minimum": 0,
        -                      "type": "number"
        -                    },
        -                    "relativeWeight": {
        -                      "maximum": 1,
        -                      "minimum": 0,
        -                      "type": "number"
        -                    },
        -                    "uncertaintyDegrees": {
        -                      "maximum": 3,
        -                      "minimum": 0,
        -                      "type": "number"
        -                    }
        -                  },
        -                  "required": [
        -                    "movingBody",
        -                    "natalBody",
        -                    "aspect",
        -                    "orbDegrees",
        -                    "uncertaintyDegrees",
        -                    "relativeWeight"
        -                  ],
        -                  "type": "object"
        -                },
        -                "contactKey": {
        -                  "maxLength": 80,
        -                  "minLength": 1,
        -                  "type": "string"
        -                },
        -                "end": {
        -                  "format": "date",
        -                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -                  "type": "string"
        -                },
        -                "endClipped": {
        -                  "type": "boolean"
        -                },
        -                "id": {
        -                  "maxLength": 160,
        -                  "minLength": 1,
        -                  "type": "string"
        -                },
        -                "peak": {
        -                  "format": "date",
        -                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -                  "type": "string"
        -                },
        -                "peakIsUnique": {
        -                  "type": "boolean"
        -                },
        -                "peakRelativeScore": {
        -                  "maximum": 3,
        -                  "minimum": 0,
        -                  "type": "number"
        -                },
        -                "rank": {
        -                  "maximum": 5,
        -                  "minimum": 1,
        -                  "type": "integer"
        -                },
        -                "relativeLabel": {
        -                  "maxLength": 100,
        -                  "minLength": 1,
        -                  "type": "string"
        -                },
        -                "relativeRatio": {
        -                  "maximum": 1,
        -                  "minimum": 0,
        -                  "type": "number"
        -                },
        -                "start": {
        -                  "format": "date",
        -                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -                  "type": "string"
        -                },
        -                "startClipped": {
        -                  "type": "boolean"
        -                },
        -                "title": {
        -                  "maxLength": 200,
        -                  "minLength": 1,
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "id",
        -                "rank",
        -                "start",
        -                "end",
        -                "peak",
        -                "peakIsUnique",
        -                "contactKey",
        -                "contact",
        -                "title",
        -                "peakRelativeScore",
        -                "relativeLabel",
        -                "relativeRatio",
        -                "startClipped",
        -                "endClipped",
        -                "annualRank"
        -              ],
        -              "type": "object"
        -            },
        -            "maxItems": 5,
        -            "type": "array"
        -          }
        -        },
        -        "required": [
        -          "asOfDate",
        -          "windows",
        -          "totalDistinctWindows"
        -        ],
        -        "type": "object"
        -      },
        -      "windows": {
        -        "items": {
        -          "additionalProperties": false,
        -          "properties": {
        -            "contact": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "aspect": {
        -                  "enum": [
        -                    "conjunction",
        -                    "sextile",
        -                    "square",
        -                    "trine",
        -                    "opposition"
        -                  ],
        -                  "type": "string"
        -                },
        -                "movingBody": {
        -                  "maxLength": 20,
        -                  "minLength": 1,
        -                  "type": "string"
        -                },
        -                "natalBody": {
        -                  "maxLength": 20,
        -                  "minLength": 1,
        -                  "type": "string"
        -                },
        -                "orbDegrees": {
        -                  "maximum": 3,
        -                  "minimum": 0,
        -                  "type": "number"
        -                },
        -                "relativeWeight": {
        -                  "maximum": 1,
        -                  "minimum": 0,
        -                  "type": "number"
        -                },
        -                "uncertaintyDegrees": {
        -                  "maximum": 3,
        -                  "minimum": 0,
        -                  "type": "number"
        -                }
        -              },
        -              "required": [
        -                "movingBody",
        -                "natalBody",
        -                "aspect",
        -                "orbDegrees",
        -                "uncertaintyDegrees",
        -                "relativeWeight"
        -              ],
        -              "type": "object"
        -            },
        -            "contactKey": {
        -              "maxLength": 80,
        -              "minLength": 1,
        -              "type": "string"
        -            },
        -            "end": {
        -              "format": "date",
        -              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -              "type": "string"
        -            },
        -            "endClipped": {
        -              "type": "boolean"
        -            },
        -            "id": {
        -              "maxLength": 160,
        -              "minLength": 1,
        -              "type": "string"
        -            },
        -            "peak": {
        -              "format": "date",
        -              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -              "type": "string"
        -            },
        -            "peakIsUnique": {
        -              "type": "boolean"
        -            },
        -            "peakRelativeScore": {
        -              "maximum": 3,
        -              "minimum": 0,
        -              "type": "number"
        -            },
        -            "rank": {
        -              "maximum": 5,
        -              "minimum": 1,
        -              "type": "integer"
        -            },
        -            "relativeLabel": {
        -              "maxLength": 100,
        -              "minLength": 1,
        -              "type": "string"
        -            },
        -            "relativeRatio": {
        -              "maximum": 1,
        -              "minimum": 0,
        -              "type": "number"
        -            },
        -            "start": {
        -              "format": "date",
        -              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        -              "type": "string"
        -            },
        -            "startClipped": {
        -              "type": "boolean"
        -            },
        -            "title": {
        -              "maxLength": 200,
        -              "minLength": 1,
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "id",
        -            "rank",
        -            "start",
        -            "end",
        -            "peak",
        -            "peakIsUnique",
        -            "contactKey",
        -            "contact",
        -            "title",
        -            "peakRelativeScore",
        -            "relativeLabel",
        -            "relativeRatio",
        -            "startClipped",
        -            "endClipped"
        -          ],
        -          "type": "object"
        -        },
        -        "maxItems": 5,
        -        "type": "array"
        -      },
        -      "year": {
        -        "pattern": "^(19|20)\\d{2}$",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "year",
        -      "coverage",
        -      "calendarAvailableTo",
        -      "timezone",
        -      "timezoneDataVersion",
        -      "providerVersion",
        -      "algorithmVersion",
        -      "selectionVersion",
        -      "calculatedAt",
        -      "windows",
        -      "totalDistinctWindows",
        -      "uncertainty",
        -      "method",
        -      "interpretationNote",
        -      "upcoming",
        -      "persistence"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "algorithmVersion": {
        +        "maxLength": 100,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "birthProfileVersion": {
        +        "maximum": 9007199254740991,
        +        "minimum": 1,
        +        "type": "integer"
        +      },
        +      "calculatedAt": {
        +        "format": "date-time",
        +        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +        "type": "string"
        +      },
        +      "calendarAvailableTo": {
        +        "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
        +        "type": "string"
        +      },
        +      "coverage": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "availableFrom": {
        +            "format": "date",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +            "type": "string"
        +          },
        +          "availableTo": {
        +            "format": "date",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +            "type": "string"
        +          },
        +          "end": {
        +            "format": "date",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +            "type": "string"
        +          },
        +          "fullYear": {
        +            "type": "boolean"
        +          },
        +          "requestedEnd": {
        +            "format": "date",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +            "type": "string"
        +          },
        +          "requestedStart": {
        +            "format": "date",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +            "type": "string"
        +          },
        +          "start": {
        +            "format": "date",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "requestedStart",
        +          "requestedEnd",
        +          "start",
        +          "end",
        +          "fullYear",
        +          "availableFrom",
        +          "availableTo"
        +        ],
        +        "type": "object"
        +      },
        +      "interpretationNote": {
        +        "maxLength": 1000,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "method": {
        +        "maxLength": 1000,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "providerVersion": {
        +        "maxLength": 300,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "reading": {
        +        "additionalProperties": false,
        +        "description": "Expanded chronological overview or focused annual selection. With focus active, reading.windows contains every matching annual candidate; base windows and upcoming remain unfiltered context.",
        +        "properties": {
        +          "asOfDate": {
        +            "format": "date",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +            "type": "string"
        +          },
        +          "coverage": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "availableFrom": {
        +                "format": "date",
        +                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                "type": "string"
        +              },
        +              "availableTo": {
        +                "format": "date",
        +                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                "type": "string"
        +              },
        +              "end": {
        +                "format": "date",
        +                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                "type": "string"
        +              },
        +              "fullYear": {
        +                "type": "boolean"
        +              },
        +              "requestedEnd": {
        +                "format": "date",
        +                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                "type": "string"
        +              },
        +              "requestedStart": {
        +                "format": "date",
        +                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                "type": "string"
        +              },
        +              "start": {
        +                "format": "date",
        +                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "requestedStart",
        +              "requestedEnd",
        +              "start",
        +              "end",
        +              "fullYear",
        +              "availableFrom",
        +              "availableTo"
        +            ],
        +            "type": "object"
        +          },
        +          "focus": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "movingBody": {
        +                "enum": [
        +                  "sun",
        +                  "moon",
        +                  "mercury",
        +                  "venus",
        +                  "mars",
        +                  "jupiter",
        +                  "saturn",
        +                  "uranus",
        +                  "neptune",
        +                  "pluto",
        +                  "true_node",
        +                  "solar_eclipse",
        +                  "lunar_eclipse"
        +                ],
        +                "type": "string"
        +              },
        +              "natalBody": {
        +                "enum": [
        +                  "sun",
        +                  "moon",
        +                  "mercury",
        +                  "venus",
        +                  "mars",
        +                  "jupiter",
        +                  "saturn",
        +                  "uranus",
        +                  "neptune",
        +                  "pluto",
        +                  "true_node",
        +                  "ascendant",
        +                  "midheaven"
        +                ],
        +                "type": "string"
        +              },
        +              "technique": {
        +                "enum": [
        +                  "transit",
        +                  "return",
        +                  "eclipse_contact"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "mode": {
        +            "enum": [
        +              "overview",
        +              "focused"
        +            ],
        +            "type": "string"
        +          },
        +          "selectionNote": {
        +            "maxLength": 1000,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "timezone": {
        +            "maxLength": 100,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "timingLimit": {
        +            "maxLength": 1000,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "totalMatches": {
        +            "maximum": 366,
        +            "minimum": 0,
        +            "type": "integer"
        +          },
        +          "uncertainty": {
        +            "maxLength": 1000,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "windows": {
        +            "items": {
        +              "oneOf": [
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "annualRank": {
        +                      "maximum": 366,
        +                      "minimum": 1,
        +                      "type": "integer"
        +                    },
        +                    "contact": {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "aspect": {
        +                          "enum": [
        +                            "conjunction",
        +                            "sextile",
        +                            "square",
        +                            "trine",
        +                            "opposition"
        +                          ],
        +                          "type": "string"
        +                        },
        +                        "movingBody": {
        +                          "maxLength": 30,
        +                          "minLength": 1,
        +                          "type": "string"
        +                        },
        +                        "natalBody": {
        +                          "maxLength": 30,
        +                          "minLength": 1,
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "movingBody",
        +                        "natalBody",
        +                        "aspect"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    "end": {
        +                      "format": "date",
        +                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                      "type": "string"
        +                    },
        +                    "endClipped": {
        +                      "type": "boolean"
        +                    },
        +                    "id": {
        +                      "maxLength": 160,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    "peak": {
        +                      "format": "date",
        +                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                      "type": "string"
        +                    },
        +                    "peakIsUnique": {
        +                      "const": true,
        +                      "type": "boolean"
        +                    },
        +                    "remainingRank": {
        +                      "anyOf": [
        +                        {
        +                          "maximum": 5,
        +                          "minimum": 1,
        +                          "type": "integer"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ]
        +                    },
        +                    "start": {
        +                      "format": "date",
        +                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                      "type": "string"
        +                    },
        +                    "startClipped": {
        +                      "type": "boolean"
        +                    },
        +                    "technique": {
        +                      "enum": [
        +                        "transit",
        +                        "return",
        +                        "eclipse_contact"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    "temporalStatus": {
        +                      "enum": [
        +                        "past",
        +                        "ongoing",
        +                        "future"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    "title": {
        +                      "maxLength": 200,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "id",
        +                    "annualRank",
        +                    "remainingRank",
        +                    "temporalStatus",
        +                    "technique",
        +                    "title",
        +                    "contact",
        +                    "start",
        +                    "end",
        +                    "startClipped",
        +                    "endClipped",
        +                    "peakIsUnique",
        +                    "peak"
        +                  ],
        +                  "type": "object"
        +                },
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "annualRank": {
        +                      "maximum": 366,
        +                      "minimum": 1,
        +                      "type": "integer"
        +                    },
        +                    "contact": {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "aspect": {
        +                          "enum": [
        +                            "conjunction",
        +                            "sextile",
        +                            "square",
        +                            "trine",
        +                            "opposition"
        +                          ],
        +                          "type": "string"
        +                        },
        +                        "movingBody": {
        +                          "maxLength": 30,
        +                          "minLength": 1,
        +                          "type": "string"
        +                        },
        +                        "natalBody": {
        +                          "maxLength": 30,
        +                          "minLength": 1,
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "movingBody",
        +                        "natalBody",
        +                        "aspect"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    "end": {
        +                      "format": "date",
        +                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                      "type": "string"
        +                    },
        +                    "endClipped": {
        +                      "type": "boolean"
        +                    },
        +                    "id": {
        +                      "maxLength": 160,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    "peak": {
        +                      "type": "null"
        +                    },
        +                    "peakIsUnique": {
        +                      "const": false,
        +                      "type": "boolean"
        +                    },
        +                    "remainingRank": {
        +                      "anyOf": [
        +                        {
        +                          "maximum": 5,
        +                          "minimum": 1,
        +                          "type": "integer"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ]
        +                    },
        +                    "start": {
        +                      "format": "date",
        +                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                      "type": "string"
        +                    },
        +                    "startClipped": {
        +                      "type": "boolean"
        +                    },
        +                    "technique": {
        +                      "enum": [
        +                        "transit",
        +                        "return",
        +                        "eclipse_contact"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    "temporalStatus": {
        +                      "enum": [
        +                        "past",
        +                        "ongoing",
        +                        "future"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    "title": {
        +                      "maxLength": 200,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "id",
        +                    "annualRank",
        +                    "remainingRank",
        +                    "temporalStatus",
        +                    "technique",
        +                    "title",
        +                    "contact",
        +                    "start",
        +                    "end",
        +                    "startClipped",
        +                    "endClipped",
        +                    "peakIsUnique",
        +                    "peak"
        +                  ],
        +                  "type": "object"
        +                }
        +              ]
        +            },
        +            "maxItems": 366,
        +            "type": "array"
        +          },
        +          "year": {
        +            "pattern": "^(19|20)\\d{2}$",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "year",
        +          "timezone",
        +          "coverage",
        +          "uncertainty",
        +          "asOfDate",
        +          "windows",
        +          "timingLimit",
        +          "selectionNote",
        +          "mode"
        +        ],
        +        "type": "object"
        +      },
        +      "selectionVersion": {
        +        "maxLength": 100,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "timezone": {
        +        "maxLength": 100,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "timezoneDataVersion": {
        +        "maxLength": 100,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "totalDistinctWindows": {
        +        "maximum": 366,
        +        "minimum": 0,
        +        "type": "integer"
        +      },
        +      "uncertainty": {
        +        "maxLength": 1000,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "upcoming": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "asOfDate": {
        +            "format": "date",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +            "type": "string"
        +          },
        +          "totalDistinctWindows": {
        +            "maximum": 366,
        +            "minimum": 0,
        +            "type": "integer"
        +          },
        +          "windows": {
        +            "items": {
        +              "oneOf": [
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "annualRank": {
        +                      "maximum": 366,
        +                      "minimum": 1,
        +                      "type": "integer"
        +                    },
        +                    "contact": {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "aspect": {
        +                          "enum": [
        +                            "conjunction",
        +                            "sextile",
        +                            "square",
        +                            "trine",
        +                            "opposition"
        +                          ],
        +                          "type": "string"
        +                        },
        +                        "movingBody": {
        +                          "maxLength": 20,
        +                          "minLength": 1,
        +                          "type": "string"
        +                        },
        +                        "natalBody": {
        +                          "maxLength": 20,
        +                          "minLength": 1,
        +                          "type": "string"
        +                        },
        +                        "orbDegrees": {
        +                          "maximum": 3,
        +                          "minimum": 0,
        +                          "type": "number"
        +                        },
        +                        "relativeWeight": {
        +                          "maximum": 1,
        +                          "minimum": 0,
        +                          "type": "number"
        +                        },
        +                        "uncertaintyDegrees": {
        +                          "maximum": 3,
        +                          "minimum": 0,
        +                          "type": "number"
        +                        }
        +                      },
        +                      "required": [
        +                        "movingBody",
        +                        "natalBody",
        +                        "aspect",
        +                        "orbDegrees",
        +                        "uncertaintyDegrees",
        +                        "relativeWeight"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    "contactKey": {
        +                      "maxLength": 80,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    "end": {
        +                      "format": "date",
        +                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                      "type": "string"
        +                    },
        +                    "endClipped": {
        +                      "type": "boolean"
        +                    },
        +                    "id": {
        +                      "maxLength": 160,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    "peak": {
        +                      "format": "date",
        +                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                      "type": "string"
        +                    },
        +                    "peakIsUnique": {
        +                      "const": true,
        +                      "type": "boolean"
        +                    },
        +                    "peakRelativeScore": {
        +                      "maximum": 3,
        +                      "minimum": 0,
        +                      "type": "number"
        +                    },
        +                    "rank": {
        +                      "maximum": 5,
        +                      "minimum": 1,
        +                      "type": "integer"
        +                    },
        +                    "relativeLabel": {
        +                      "maxLength": 100,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    "relativeRatio": {
        +                      "maximum": 1,
        +                      "minimum": 0,
        +                      "type": "number"
        +                    },
        +                    "start": {
        +                      "format": "date",
        +                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                      "type": "string"
        +                    },
        +                    "startClipped": {
        +                      "type": "boolean"
        +                    },
        +                    "title": {
        +                      "maxLength": 200,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "id",
        +                    "rank",
        +                    "start",
        +                    "end",
        +                    "contactKey",
        +                    "contact",
        +                    "title",
        +                    "peakRelativeScore",
        +                    "relativeLabel",
        +                    "relativeRatio",
        +                    "startClipped",
        +                    "endClipped",
        +                    "annualRank",
        +                    "peakIsUnique",
        +                    "peak"
        +                  ],
        +                  "type": "object"
        +                },
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "annualRank": {
        +                      "maximum": 366,
        +                      "minimum": 1,
        +                      "type": "integer"
        +                    },
        +                    "contact": {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "aspect": {
        +                          "enum": [
        +                            "conjunction",
        +                            "sextile",
        +                            "square",
        +                            "trine",
        +                            "opposition"
        +                          ],
        +                          "type": "string"
        +                        },
        +                        "movingBody": {
        +                          "maxLength": 20,
        +                          "minLength": 1,
        +                          "type": "string"
        +                        },
        +                        "natalBody": {
        +                          "maxLength": 20,
        +                          "minLength": 1,
        +                          "type": "string"
        +                        },
        +                        "orbDegrees": {
        +                          "maximum": 3,
        +                          "minimum": 0,
        +                          "type": "number"
        +                        },
        +                        "relativeWeight": {
        +                          "maximum": 1,
        +                          "minimum": 0,
        +                          "type": "number"
        +                        },
        +                        "uncertaintyDegrees": {
        +                          "maximum": 3,
        +                          "minimum": 0,
        +                          "type": "number"
        +                        }
        +                      },
        +                      "required": [
        +                        "movingBody",
        +                        "natalBody",
        +                        "aspect",
        +                        "orbDegrees",
        +                        "uncertaintyDegrees",
        +                        "relativeWeight"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    "contactKey": {
        +                      "maxLength": 80,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    "end": {
        +                      "format": "date",
        +                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                      "type": "string"
        +                    },
        +                    "endClipped": {
        +                      "type": "boolean"
        +                    },
        +                    "id": {
        +                      "maxLength": 160,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    "peak": {
        +                      "type": "null"
        +                    },
        +                    "peakIsUnique": {
        +                      "const": false,
        +                      "type": "boolean"
        +                    },
        +                    "peakRelativeScore": {
        +                      "maximum": 3,
        +                      "minimum": 0,
        +                      "type": "number"
        +                    },
        +                    "rank": {
        +                      "maximum": 5,
        +                      "minimum": 1,
        +                      "type": "integer"
        +                    },
        +                    "relativeLabel": {
        +                      "maxLength": 100,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    "relativeRatio": {
        +                      "maximum": 1,
        +                      "minimum": 0,
        +                      "type": "number"
        +                    },
        +                    "start": {
        +                      "format": "date",
        +                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                      "type": "string"
        +                    },
        +                    "startClipped": {
        +                      "type": "boolean"
        +                    },
        +                    "title": {
        +                      "maxLength": 200,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "id",
        +                    "rank",
        +                    "start",
        +                    "end",
        +                    "contactKey",
        +                    "contact",
        +                    "title",
        +                    "peakRelativeScore",
        +                    "relativeLabel",
        +                    "relativeRatio",
        +                    "startClipped",
        +                    "endClipped",
        +                    "annualRank",
        +                    "peakIsUnique",
        +                    "peak"
        +                  ],
        +                  "type": "object"
        +                }
        +              ]
        +            },
        +            "maxItems": 5,
        +            "type": "array"
        +          }
        +        },
        +        "required": [
        +          "asOfDate",
        +          "windows",
        +          "totalDistinctWindows"
        +        ],
        +        "type": "object"
        +      },
        +      "windows": {
        +        "items": {
        +          "oneOf": [
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "contact": {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "aspect": {
        +                      "enum": [
        +                        "conjunction",
        +                        "sextile",
        +                        "square",
        +                        "trine",
        +                        "opposition"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    "movingBody": {
        +                      "maxLength": 20,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    "natalBody": {
        +                      "maxLength": 20,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    "orbDegrees": {
        +                      "maximum": 3,
        +                      "minimum": 0,
        +                      "type": "number"
        +                    },
        +                    "relativeWeight": {
        +                      "maximum": 1,
        +                      "minimum": 0,
        +                      "type": "number"
        +                    },
        +                    "uncertaintyDegrees": {
        +                      "maximum": 3,
        +                      "minimum": 0,
        +                      "type": "number"
        +                    }
        +                  },
        +                  "required": [
        +                    "movingBody",
        +                    "natalBody",
        +                    "aspect",
        +                    "orbDegrees",
        +                    "uncertaintyDegrees",
        +                    "relativeWeight"
        +                  ],
        +                  "type": "object"
        +                },
        +                "contactKey": {
        +                  "maxLength": 80,
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "end": {
        +                  "format": "date",
        +                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                  "type": "string"
        +                },
        +                "endClipped": {
        +                  "type": "boolean"
        +                },
        +                "id": {
        +                  "maxLength": 160,
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "peak": {
        +                  "format": "date",
        +                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                  "type": "string"
        +                },
        +                "peakIsUnique": {
        +                  "const": true,
        +                  "type": "boolean"
        +                },
        +                "peakRelativeScore": {
        +                  "maximum": 3,
        +                  "minimum": 0,
        +                  "type": "number"
        +                },
        +                "rank": {
        +                  "maximum": 5,
        +                  "minimum": 1,
        +                  "type": "integer"
        +                },
        +                "relativeLabel": {
        +                  "maxLength": 100,
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "relativeRatio": {
        +                  "maximum": 1,
        +                  "minimum": 0,
        +                  "type": "number"
        +                },
        +                "start": {
        +                  "format": "date",
        +                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                  "type": "string"
        +                },
        +                "startClipped": {
        +                  "type": "boolean"
        +                },
        +                "title": {
        +                  "maxLength": 200,
        +                  "minLength": 1,
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "id",
        +                "rank",
        +                "start",
        +                "end",
        +                "contactKey",
        +                "contact",
        +                "title",
        +                "peakRelativeScore",
        +                "relativeLabel",
        +                "relativeRatio",
        +                "startClipped",
        +                "endClipped",
        +                "peakIsUnique",
        +                "peak"
        +              ],
        +              "type": "object"
        +            },
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "contact": {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "aspect": {
        +                      "enum": [
        +                        "conjunction",
        +                        "sextile",
        +                        "square",
        +                        "trine",
        +                        "opposition"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    "movingBody": {
        +                      "maxLength": 20,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    "natalBody": {
        +                      "maxLength": 20,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    "orbDegrees": {
        +                      "maximum": 3,
        +                      "minimum": 0,
        +                      "type": "number"
        +                    },
        +                    "relativeWeight": {
        +                      "maximum": 1,
        +                      "minimum": 0,
        +                      "type": "number"
        +                    },
        +                    "uncertaintyDegrees": {
        +                      "maximum": 3,
        +                      "minimum": 0,
        +                      "type": "number"
        +                    }
        +                  },
        +                  "required": [
        +                    "movingBody",
        +                    "natalBody",
        +                    "aspect",
        +                    "orbDegrees",
        +                    "uncertaintyDegrees",
        +                    "relativeWeight"
        +                  ],
        +                  "type": "object"
        +                },
        +                "contactKey": {
        +                  "maxLength": 80,
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "end": {
        +                  "format": "date",
        +                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                  "type": "string"
        +                },
        +                "endClipped": {
        +                  "type": "boolean"
        +                },
        +                "id": {
        +                  "maxLength": 160,
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "peak": {
        +                  "type": "null"
        +                },
        +                "peakIsUnique": {
        +                  "const": false,
        +                  "type": "boolean"
        +                },
        +                "peakRelativeScore": {
        +                  "maximum": 3,
        +                  "minimum": 0,
        +                  "type": "number"
        +                },
        +                "rank": {
        +                  "maximum": 5,
        +                  "minimum": 1,
        +                  "type": "integer"
        +                },
        +                "relativeLabel": {
        +                  "maxLength": 100,
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "relativeRatio": {
        +                  "maximum": 1,
        +                  "minimum": 0,
        +                  "type": "number"
        +                },
        +                "start": {
        +                  "format": "date",
        +                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                  "type": "string"
        +                },
        +                "startClipped": {
        +                  "type": "boolean"
        +                },
        +                "title": {
        +                  "maxLength": 200,
        +                  "minLength": 1,
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "id",
        +                "rank",
        +                "start",
        +                "end",
        +                "contactKey",
        +                "contact",
        +                "title",
        +                "peakRelativeScore",
        +                "relativeLabel",
        +                "relativeRatio",
        +                "startClipped",
        +                "endClipped",
        +                "peakIsUnique",
        +                "peak"
        +              ],
        +              "type": "object"
        +            }
        +          ]
        +        },
        +        "maxItems": 5,
        +        "type": "array"
        +      },
        +      "year": {
        +        "pattern": "^(19|20)\\d{2}$",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "birthProfileVersion",
        +      "year",
        +      "coverage",
        +      "calendarAvailableTo",
        +      "timezone",
        +      "timezoneDataVersion",
        +      "providerVersion",
        +      "algorithmVersion",
        +      "selectionVersion",
        +      "calculatedAt",
        +      "windows",
        +      "totalDistinctWindows",
        +      "uncertainty",
        +      "method",
        +      "interpretationNote",
        +      "upcoming"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "algorithmVersion": {
        +        "maxLength": 100,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "calculatedAt": {
        +        "format": "date-time",
        +        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +        "type": "string"
        +      },
        +      "calendarAvailableTo": {
        +        "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
        +        "type": "string"
        +      },
        +      "coverage": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "availableFrom": {
        +            "format": "date",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +            "type": "string"
        +          },
        +          "availableTo": {
        +            "format": "date",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +            "type": "string"
        +          },
        +          "end": {
        +            "format": "date",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +            "type": "string"
        +          },
        +          "fullYear": {
        +            "type": "boolean"
        +          },
        +          "requestedEnd": {
        +            "format": "date",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +            "type": "string"
        +          },
        +          "requestedStart": {
        +            "format": "date",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +            "type": "string"
        +          },
        +          "start": {
        +            "format": "date",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "requestedStart",
        +          "requestedEnd",
        +          "start",
        +          "end",
        +          "fullYear",
        +          "availableFrom",
        +          "availableTo"
        +        ],
        +        "type": "object"
        +      },
        +      "interpretationNote": {
        +        "maxLength": 1000,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "method": {
        +        "maxLength": 1000,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "persistence": {
        +        "const": "no_profile_chart_or_analysis_saved",
        +        "type": "string"
        +      },
        +      "providerVersion": {
        +        "maxLength": 300,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "reading": {
        +        "additionalProperties": false,
        +        "description": "Expanded chronological overview or focused annual selection. With focus active, reading.windows contains every matching annual candidate; base windows and upcoming remain unfiltered context.",
        +        "properties": {
        +          "asOfDate": {
        +            "format": "date",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +            "type": "string"
        +          },
        +          "coverage": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "availableFrom": {
        +                "format": "date",
        +                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                "type": "string"
        +              },
        +              "availableTo": {
        +                "format": "date",
        +                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                "type": "string"
        +              },
        +              "end": {
        +                "format": "date",
        +                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                "type": "string"
        +              },
        +              "fullYear": {
        +                "type": "boolean"
        +              },
        +              "requestedEnd": {
        +                "format": "date",
        +                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                "type": "string"
        +              },
        +              "requestedStart": {
        +                "format": "date",
        +                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                "type": "string"
        +              },
        +              "start": {
        +                "format": "date",
        +                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "requestedStart",
        +              "requestedEnd",
        +              "start",
        +              "end",
        +              "fullYear",
        +              "availableFrom",
        +              "availableTo"
        +            ],
        +            "type": "object"
        +          },
        +          "focus": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "movingBody": {
        +                "enum": [
        +                  "sun",
        +                  "moon",
        +                  "mercury",
        +                  "venus",
        +                  "mars",
        +                  "jupiter",
        +                  "saturn",
        +                  "uranus",
        +                  "neptune",
        +                  "pluto",
        +                  "true_node",
        +                  "solar_eclipse",
        +                  "lunar_eclipse"
        +                ],
        +                "type": "string"
        +              },
        +              "natalBody": {
        +                "enum": [
        +                  "sun",
        +                  "moon",
        +                  "mercury",
        +                  "venus",
        +                  "mars",
        +                  "jupiter",
        +                  "saturn",
        +                  "uranus",
        +                  "neptune",
        +                  "pluto",
        +                  "true_node",
        +                  "ascendant",
        +                  "midheaven"
        +                ],
        +                "type": "string"
        +              },
        +              "technique": {
        +                "enum": [
        +                  "transit",
        +                  "return",
        +                  "eclipse_contact"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "mode": {
        +            "enum": [
        +              "overview",
        +              "focused"
        +            ],
        +            "type": "string"
        +          },
        +          "selectionNote": {
        +            "maxLength": 1000,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "timezone": {
        +            "maxLength": 100,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "timingLimit": {
        +            "maxLength": 1000,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "totalMatches": {
        +            "maximum": 366,
        +            "minimum": 0,
        +            "type": "integer"
        +          },
        +          "uncertainty": {
        +            "maxLength": 1000,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "windows": {
        +            "items": {
        +              "oneOf": [
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "annualRank": {
        +                      "maximum": 366,
        +                      "minimum": 1,
        +                      "type": "integer"
        +                    },
        +                    "contact": {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "aspect": {
        +                          "enum": [
        +                            "conjunction",
        +                            "sextile",
        +                            "square",
        +                            "trine",
        +                            "opposition"
        +                          ],
        +                          "type": "string"
        +                        },
        +                        "movingBody": {
        +                          "maxLength": 30,
        +                          "minLength": 1,
        +                          "type": "string"
        +                        },
        +                        "natalBody": {
        +                          "maxLength": 30,
        +                          "minLength": 1,
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "movingBody",
        +                        "natalBody",
        +                        "aspect"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    "end": {
        +                      "format": "date",
        +                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                      "type": "string"
        +                    },
        +                    "endClipped": {
        +                      "type": "boolean"
        +                    },
        +                    "id": {
        +                      "maxLength": 160,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    "peak": {
        +                      "format": "date",
        +                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                      "type": "string"
        +                    },
        +                    "peakIsUnique": {
        +                      "const": true,
        +                      "type": "boolean"
        +                    },
        +                    "remainingRank": {
        +                      "anyOf": [
        +                        {
        +                          "maximum": 5,
        +                          "minimum": 1,
        +                          "type": "integer"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ]
        +                    },
        +                    "start": {
        +                      "format": "date",
        +                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                      "type": "string"
        +                    },
        +                    "startClipped": {
        +                      "type": "boolean"
        +                    },
        +                    "technique": {
        +                      "enum": [
        +                        "transit",
        +                        "return",
        +                        "eclipse_contact"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    "temporalStatus": {
        +                      "enum": [
        +                        "past",
        +                        "ongoing",
        +                        "future"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    "title": {
        +                      "maxLength": 200,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "id",
        +                    "annualRank",
        +                    "remainingRank",
        +                    "temporalStatus",
        +                    "technique",
        +                    "title",
        +                    "contact",
        +                    "start",
        +                    "end",
        +                    "startClipped",
        +                    "endClipped",
        +                    "peakIsUnique",
        +                    "peak"
        +                  ],
        +                  "type": "object"
        +                },
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "annualRank": {
        +                      "maximum": 366,
        +                      "minimum": 1,
        +                      "type": "integer"
        +                    },
        +                    "contact": {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "aspect": {
        +                          "enum": [
        +                            "conjunction",
        +                            "sextile",
        +                            "square",
        +                            "trine",
        +                            "opposition"
        +                          ],
        +                          "type": "string"
        +                        },
        +                        "movingBody": {
        +                          "maxLength": 30,
        +                          "minLength": 1,
        +                          "type": "string"
        +                        },
        +                        "natalBody": {
        +                          "maxLength": 30,
        +                          "minLength": 1,
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "movingBody",
        +                        "natalBody",
        +                        "aspect"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    "end": {
        +                      "format": "date",
        +                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                      "type": "string"
        +                    },
        +                    "endClipped": {
        +                      "type": "boolean"
        +                    },
        +                    "id": {
        +                      "maxLength": 160,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    "peak": {
        +                      "type": "null"
        +                    },
        +                    "peakIsUnique": {
        +                      "const": false,
        +                      "type": "boolean"
        +                    },
        +                    "remainingRank": {
        +                      "anyOf": [
        +                        {
        +                          "maximum": 5,
        +                          "minimum": 1,
        +                          "type": "integer"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ]
        +                    },
        +                    "start": {
        +                      "format": "date",
        +                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                      "type": "string"
        +                    },
        +                    "startClipped": {
        +                      "type": "boolean"
        +                    },
        +                    "technique": {
        +                      "enum": [
        +                        "transit",
        +                        "return",
        +                        "eclipse_contact"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    "temporalStatus": {
        +                      "enum": [
        +                        "past",
        +                        "ongoing",
        +                        "future"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    "title": {
        +                      "maxLength": 200,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "id",
        +                    "annualRank",
        +                    "remainingRank",
        +                    "temporalStatus",
        +                    "technique",
        +                    "title",
        +                    "contact",
        +                    "start",
        +                    "end",
        +                    "startClipped",
        +                    "endClipped",
        +                    "peakIsUnique",
        +                    "peak"
        +                  ],
        +                  "type": "object"
        +                }
        +              ]
        +            },
        +            "maxItems": 366,
        +            "type": "array"
        +          },
        +          "year": {
        +            "pattern": "^(19|20)\\d{2}$",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "year",
        +          "timezone",
        +          "coverage",
        +          "uncertainty",
        +          "asOfDate",
        +          "windows",
        +          "timingLimit",
        +          "selectionNote",
        +          "mode"
        +        ],
        +        "type": "object"
        +      },
        +      "selectionVersion": {
        +        "maxLength": 100,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "timezone": {
        +        "maxLength": 100,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "timezoneDataVersion": {
        +        "maxLength": 100,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "totalDistinctWindows": {
        +        "maximum": 366,
        +        "minimum": 0,
        +        "type": "integer"
        +      },
        +      "uncertainty": {
        +        "maxLength": 1000,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "upcoming": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "asOfDate": {
        +            "format": "date",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +            "type": "string"
        +          },
        +          "totalDistinctWindows": {
        +            "maximum": 366,
        +            "minimum": 0,
        +            "type": "integer"
        +          },
        +          "windows": {
        +            "items": {
        +              "oneOf": [
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "annualRank": {
        +                      "maximum": 366,
        +                      "minimum": 1,
        +                      "type": "integer"
        +                    },
        +                    "contact": {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "aspect": {
        +                          "enum": [
        +                            "conjunction",
        +                            "sextile",
        +                            "square",
        +                            "trine",
        +                            "opposition"
        +                          ],
        +                          "type": "string"
        +                        },
        +                        "movingBody": {
        +                          "maxLength": 20,
        +                          "minLength": 1,
        +                          "type": "string"
        +                        },
        +                        "natalBody": {
        +                          "maxLength": 20,
        +                          "minLength": 1,
        +                          "type": "string"
        +                        },
        +                        "orbDegrees": {
        +                          "maximum": 3,
        +                          "minimum": 0,
        +                          "type": "number"
        +                        },
        +                        "relativeWeight": {
        +                          "maximum": 1,
        +                          "minimum": 0,
        +                          "type": "number"
        +                        },
        +                        "uncertaintyDegrees": {
        +                          "maximum": 3,
        +                          "minimum": 0,
        +                          "type": "number"
        +                        }
        +                      },
        +                      "required": [
        +                        "movingBody",
        +                        "natalBody",
        +                        "aspect",
        +                        "orbDegrees",
        +                        "uncertaintyDegrees",
        +                        "relativeWeight"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    "contactKey": {
        +                      "maxLength": 80,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    "end": {
        +                      "format": "date",
        +                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                      "type": "string"
        +                    },
        +                    "endClipped": {
        +                      "type": "boolean"
        +                    },
        +                    "id": {
        +                      "maxLength": 160,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    "peak": {
        +                      "format": "date",
        +                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                      "type": "string"
        +                    },
        +                    "peakIsUnique": {
        +                      "const": true,
        +                      "type": "boolean"
        +                    },
        +                    "peakRelativeScore": {
        +                      "maximum": 3,
        +                      "minimum": 0,
        +                      "type": "number"
        +                    },
        +                    "rank": {
        +                      "maximum": 5,
        +                      "minimum": 1,
        +                      "type": "integer"
        +                    },
        +                    "relativeLabel": {
        +                      "maxLength": 100,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    "relativeRatio": {
        +                      "maximum": 1,
        +                      "minimum": 0,
        +                      "type": "number"
        +                    },
        +                    "start": {
        +                      "format": "date",
        +                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                      "type": "string"
        +                    },
        +                    "startClipped": {
        +                      "type": "boolean"
        +                    },
        +                    "title": {
        +                      "maxLength": 200,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "id",
        +                    "rank",
        +                    "start",
        +                    "end",
        +                    "contactKey",
        +                    "contact",
        +                    "title",
        +                    "peakRelativeScore",
        +                    "relativeLabel",
        +                    "relativeRatio",
        +                    "startClipped",
        +                    "endClipped",
        +                    "annualRank",
        +                    "peakIsUnique",
        +                    "peak"
        +                  ],
        +                  "type": "object"
        +                },
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "annualRank": {
        +                      "maximum": 366,
        +                      "minimum": 1,
        +                      "type": "integer"
        +                    },
        +                    "contact": {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "aspect": {
        +                          "enum": [
        +                            "conjunction",
        +                            "sextile",
        +                            "square",
        +                            "trine",
        +                            "opposition"
        +                          ],
        +                          "type": "string"
        +                        },
        +                        "movingBody": {
        +                          "maxLength": 20,
        +                          "minLength": 1,
        +                          "type": "string"
        +                        },
        +                        "natalBody": {
        +                          "maxLength": 20,
        +                          "minLength": 1,
        +                          "type": "string"
        +                        },
        +                        "orbDegrees": {
        +                          "maximum": 3,
        +                          "minimum": 0,
        +                          "type": "number"
        +                        },
        +                        "relativeWeight": {
        +                          "maximum": 1,
        +                          "minimum": 0,
        +                          "type": "number"
        +                        },
        +                        "uncertaintyDegrees": {
        +                          "maximum": 3,
        +                          "minimum": 0,
        +                          "type": "number"
        +                        }
        +                      },
        +                      "required": [
        +                        "movingBody",
        +                        "natalBody",
        +                        "aspect",
        +                        "orbDegrees",
        +                        "uncertaintyDegrees",
        +                        "relativeWeight"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    "contactKey": {
        +                      "maxLength": 80,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    "end": {
        +                      "format": "date",
        +                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                      "type": "string"
        +                    },
        +                    "endClipped": {
        +                      "type": "boolean"
        +                    },
        +                    "id": {
        +                      "maxLength": 160,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    "peak": {
        +                      "type": "null"
        +                    },
        +                    "peakIsUnique": {
        +                      "const": false,
        +                      "type": "boolean"
        +                    },
        +                    "peakRelativeScore": {
        +                      "maximum": 3,
        +                      "minimum": 0,
        +                      "type": "number"
        +                    },
        +                    "rank": {
        +                      "maximum": 5,
        +                      "minimum": 1,
        +                      "type": "integer"
        +                    },
        +                    "relativeLabel": {
        +                      "maxLength": 100,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    "relativeRatio": {
        +                      "maximum": 1,
        +                      "minimum": 0,
        +                      "type": "number"
        +                    },
        +                    "start": {
        +                      "format": "date",
        +                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                      "type": "string"
        +                    },
        +                    "startClipped": {
        +                      "type": "boolean"
        +                    },
        +                    "title": {
        +                      "maxLength": 200,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "id",
        +                    "rank",
        +                    "start",
        +                    "end",
        +                    "contactKey",
        +                    "contact",
        +                    "title",
        +                    "peakRelativeScore",
        +                    "relativeLabel",
        +                    "relativeRatio",
        +                    "startClipped",
        +                    "endClipped",
        +                    "annualRank",
        +                    "peakIsUnique",
        +                    "peak"
        +                  ],
        +                  "type": "object"
        +                }
        +              ]
        +            },
        +            "maxItems": 5,
        +            "type": "array"
        +          }
        +        },
        +        "required": [
        +          "asOfDate",
        +          "windows",
        +          "totalDistinctWindows"
        +        ],
        +        "type": "object"
        +      },
        +      "windows": {
        +        "items": {
        +          "oneOf": [
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "contact": {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "aspect": {
        +                      "enum": [
        +                        "conjunction",
        +                        "sextile",
        +                        "square",
        +                        "trine",
        +                        "opposition"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    "movingBody": {
        +                      "maxLength": 20,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    "natalBody": {
        +                      "maxLength": 20,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    "orbDegrees": {
        +                      "maximum": 3,
        +                      "minimum": 0,
        +                      "type": "number"
        +                    },
        +                    "relativeWeight": {
        +                      "maximum": 1,
        +                      "minimum": 0,
        +                      "type": "number"
        +                    },
        +                    "uncertaintyDegrees": {
        +                      "maximum": 3,
        +                      "minimum": 0,
        +                      "type": "number"
        +                    }
        +                  },
        +                  "required": [
        +                    "movingBody",
        +                    "natalBody",
        +                    "aspect",
        +                    "orbDegrees",
        +                    "uncertaintyDegrees",
        +                    "relativeWeight"
        +                  ],
        +                  "type": "object"
        +                },
        +                "contactKey": {
        +                  "maxLength": 80,
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "end": {
        +                  "format": "date",
        +                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                  "type": "string"
        +                },
        +                "endClipped": {
        +                  "type": "boolean"
        +                },
        +                "id": {
        +                  "maxLength": 160,
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "peak": {
        +                  "format": "date",
        +                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                  "type": "string"
        +                },
        +                "peakIsUnique": {
        +                  "const": true,
        +                  "type": "boolean"
        +                },
        +                "peakRelativeScore": {
        +                  "maximum": 3,
        +                  "minimum": 0,
        +                  "type": "number"
        +                },
        +                "rank": {
        +                  "maximum": 5,
        +                  "minimum": 1,
        +                  "type": "integer"
        +                },
        +                "relativeLabel": {
        +                  "maxLength": 100,
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "relativeRatio": {
        +                  "maximum": 1,
        +                  "minimum": 0,
        +                  "type": "number"
        +                },
        +                "start": {
        +                  "format": "date",
        +                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                  "type": "string"
        +                },
        +                "startClipped": {
        +                  "type": "boolean"
        +                },
        +                "title": {
        +                  "maxLength": 200,
        +                  "minLength": 1,
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "id",
        +                "rank",
        +                "start",
        +                "end",
        +                "contactKey",
        +                "contact",
        +                "title",
        +                "peakRelativeScore",
        +                "relativeLabel",
        +                "relativeRatio",
        +                "startClipped",
        +                "endClipped",
        +                "peakIsUnique",
        +                "peak"
        +              ],
        +              "type": "object"
        +            },
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "contact": {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "aspect": {
        +                      "enum": [
        +                        "conjunction",
        +                        "sextile",
        +                        "square",
        +                        "trine",
        +                        "opposition"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    "movingBody": {
        +                      "maxLength": 20,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    "natalBody": {
        +                      "maxLength": 20,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    "orbDegrees": {
        +                      "maximum": 3,
        +                      "minimum": 0,
        +                      "type": "number"
        +                    },
        +                    "relativeWeight": {
        +                      "maximum": 1,
        +                      "minimum": 0,
        +                      "type": "number"
        +                    },
        +                    "uncertaintyDegrees": {
        +                      "maximum": 3,
        +                      "minimum": 0,
        +                      "type": "number"
        +                    }
        +                  },
        +                  "required": [
        +                    "movingBody",
        +                    "natalBody",
        +                    "aspect",
        +                    "orbDegrees",
        +                    "uncertaintyDegrees",
        +                    "relativeWeight"
        +                  ],
        +                  "type": "object"
        +                },
        +                "contactKey": {
        +                  "maxLength": 80,
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "end": {
        +                  "format": "date",
        +                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                  "type": "string"
        +                },
        +                "endClipped": {
        +                  "type": "boolean"
        +                },
        +                "id": {
        +                  "maxLength": 160,
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "peak": {
        +                  "type": "null"
        +                },
        +                "peakIsUnique": {
        +                  "const": false,
        +                  "type": "boolean"
        +                },
        +                "peakRelativeScore": {
        +                  "maximum": 3,
        +                  "minimum": 0,
        +                  "type": "number"
        +                },
        +                "rank": {
        +                  "maximum": 5,
        +                  "minimum": 1,
        +                  "type": "integer"
        +                },
        +                "relativeLabel": {
        +                  "maxLength": 100,
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "relativeRatio": {
        +                  "maximum": 1,
        +                  "minimum": 0,
        +                  "type": "number"
        +                },
        +                "start": {
        +                  "format": "date",
        +                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
        +                  "type": "string"
        +                },
        +                "startClipped": {
        +                  "type": "boolean"
        +                },
        +                "title": {
        +                  "maxLength": 200,
        +                  "minLength": 1,
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "id",
        +                "rank",
        +                "start",
        +                "end",
        +                "contactKey",
        +                "contact",
        +                "title",
        +                "peakRelativeScore",
        +                "relativeLabel",
        +                "relativeRatio",
        +                "startClipped",
        +                "endClipped",
        +                "peakIsUnique",
        +                "peak"
        +              ],
        +              "type": "object"
        +            }
        +          ]
        +        },
        +        "maxItems": 5,
        +        "type": "array"
        +      },
        +      "year": {
        +        "pattern": "^(19|20)\\d{2}$",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "year",
        +      "coverage",
        +      "calendarAvailableTo",
        +      "timezone",
        +      "timezoneDataVersion",
        +      "providerVersion",
        +      "algorithmVersion",
        +      "selectionVersion",
        +      "calculatedAt",
        +      "windows",
        +      "totalDistinctWindows",
        +      "uncertainty",
        +      "method",
        +      "interpretationNote",
        +      "upcoming",
        +      "persistence"
        +    ],
        +    "type": "object"
        +  }
        +]
  2. 7 tool updates
    • First observedcalculate_chart
    • First observedcompare_dates
    • First observedget_chart
    • First observedget_daily_focus
    • First observedget_profile
    • First observedget_timing_month
    • First observedget_timing_year

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    A free, read-only astrology server that computes natal charts with Placidus houses, daily and weekly transits, and synastry comparisons from birth date, time and place, along with plain-language readings, chart images and shareable X cards. It also generates sun-sign readings and festive star cards, plus playful matches against a list of famous people, without login, payment or stored user data.
    78 npm
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Calculates astrological birth charts including planetary positions, house placements, and aspects based on birth date, time, and location.
    1,472 npm
    1
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Calculates astrological natal charts with high precision using Swiss Ephemeris, supporting multiple house systems and location inputs.
    2
    24 npm
    5
    AGPL 3.0
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources