{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://gpuprice.fyi/datasets/price-persistence/schema.json","title":"GPUPrice price-persistence analysis record","description":"Schema contract for versioned price-persistence analyses. This endpoint describes records; it does not contain observations or supported budget ranges.","type":"object","additionalProperties":false,"required":["sku","billing_mode","window_days","window_end","analysis_version","methodology_version","dimension_version","evidence_state","confidence_label","insufficiency_reasons","observed_days","archive_days","provider_coverage_days","longest_gap_days","missing_intervals","provider_events","source_trace","generated_at"],"properties":{"sku":{"type":"string","description":"Canonical GPU variant; ambiguous variants cannot produce sufficient evidence."},"billing_mode":{"enum":["on_demand","spot","interruptible","reservation_capacity_block","serverless","cluster","unknown"]},"window_days":{"enum":[30,90,180]},"window_end":{"type":"string","format":"date"},"analysis_version":{"type":"integer","minimum":1},"methodology_version":{"type":"string"},"dimension_version":{"type":"string"},"evidence_state":{"enum":["sufficient","insufficient_evidence"]},"confidence_label":{"enum":["high","qualified","insufficient_evidence"]},"insufficiency_reasons":{"type":"array","items":{"type":"string"},"uniqueItems":true},"observed_days":{"type":"integer","minimum":0},"archive_days":{"type":"integer","minimum":0,"description":"Must be zero for a public supported range; archive rows are excluded."},"provider_coverage_days":{"type":"integer","minimum":0,"description":"Observed days with at least three independent providers."},"longest_gap_days":{"type":"integer","minimum":0},"latest_live_observation_at":{"type":["string","null"],"format":"date-time"},"missing_intervals":{"type":"array","description":"Explicit unobserved intervals; missing days are never interpolated.","items":{"type":"object"}},"provider_events":{"type":"array","description":"Versioned provider entry and exit effects.","items":{"type":"object"}},"p25_usd_per_hour":{"type":["number","null"],"minimum":0},"p50_usd_per_hour":{"type":["number","null"],"minimum":0},"p75_usd_per_hour":{"type":["number","null"],"minimum":0},"floor_reference_usd_per_hour":{"type":["number","null"],"minimum":0},"floor_persistence_days":{"type":["integer","null"],"minimum":0},"floor_persistence_pct_observed":{"type":["number","null"],"minimum":0,"maximum":1},"largest_verified_revisions":{"type":"array","items":{"type":"object"}},"latest_cheapest_usd_per_hour":{"type":["number","null"],"minimum":0},"supported_budget_low_usd_per_hour":{"type":["number","null"],"minimum":0,"description":"Must be null when evidence_state is insufficient_evidence."},"supported_budget_high_usd_per_hour":{"type":["number","null"],"minimum":0,"description":"Must be null when evidence_state is insufficient_evidence."},"source_trace":{"type":"array","description":"Source references allowed by the provider rights register.","items":{"type":"object"}},"generated_at":{"type":"string","format":"date-time"}},"allOf":[{"if":{"properties":{"evidence_state":{"const":"insufficient_evidence"}},"required":["evidence_state"]},"then":{"properties":{"insufficiency_reasons":{"minItems":1},"supported_budget_low_usd_per_hour":{"type":"null"},"supported_budget_high_usd_per_hour":{"type":"null"}}}}]}