{"openapi":"3.1.0","info":{"title":"Formitra evaluation API","description":"Read-only experimental GB half-hour demand forecasts in MW. GET retrieves stored forecasts; it never runs a model. Daily delivery covers 23:00 Europe/London to 23:00 the next day (46/48/50 half-hours). Target publication is 07:30 local. Intervals are experimental marginal intervals, not whole-curve guarantees. Invitation-only evaluation; no production SLA.","version":"0.1.0"},"servers":[{"url":"https://formitra.com"}],"paths":{"/v1/gb/demand/performance.csv":{"get":{"summary":"Api Performance","description":"Download full, daily, hourly, calendar and exact matched-subset metrics.","operationId":"api_performance_v1_gb_demand_performance_csv_get","responses":{"200":{"description":"Derived performance CSV; header only when no evidence","content":{"text/csv":{"schema":{"type":"string"}}}},"401":{"description":"Invalid or missing bearer key"},"429":{"description":"Shared pilot rate limit exceeded"}},"security":[{"HTTPBearer":[]}]}},"/v1/gb/demand/latest":{"get":{"summary":"Latest","description":"Retrieve the latest due ready forecast; never run inference.","operationId":"latest_v1_gb_demand_latest_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Forecast"}}}},"401":{"description":"Invalid or missing bearer key"},"503":{"description":"Due forecast absent, late or unavailable"},"429":{"description":"Shared pilot rate limit exceeded"}},"security":[{"HTTPBearer":[]}]}},"/v1/gb/demand/vintages":{"get":{"summary":"Vintages","description":"List stored issue summaries with inclusive issue-date filters.","operationId":"vintages_v1_gb_demand_vintages_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"issued_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Issued From"}},{"name":"issued_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Issued To"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":366,"minimum":1,"default":30,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/VintageSummary"},"title":"Response Vintages V1 Gb Demand Vintages Get"}}}},"401":{"description":"Invalid or missing bearer key"},"429":{"description":"Shared pilot rate limit exceeded"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/gb/demand/vintages/{identifier}":{"get":{"summary":"Vintage","description":"Retrieve an immutable issue, including its explicit failure status.","operationId":"vintage_v1_gb_demand_vintages__identifier__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"identifier","in":"path","required":true,"schema":{"type":"string","format":"date","title":"Identifier"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Forecast"}}}},"401":{"description":"Invalid or missing bearer key"},"404":{"description":"Vintage not found"},"429":{"description":"Shared pilot rate limit exceeded"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Forecast":{"properties":{"id":{"type":"string","title":"Id"},"issueDate":{"type":"string","format":"date","title":"Issuedate"},"status":{"type":"string","title":"Status","description":"ready, late, unavailable or publishing"},"generatedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"format":"date-time","title":"Generatedat"},"inputCutoff":{"anyOf":[{"type":"string"},{"type":"null"}],"format":"date-time","title":"Inputcutoff"},"scheduledIssue":{"anyOf":[{"type":"string"},{"type":"null"}],"format":"date-time","title":"Scheduledissue"},"publishedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"format":"date-time","title":"Publishedat","description":"Completed HTTP observation time, not receipt visibility or uptime"},"provisional":{"type":"boolean","title":"Provisional","description":"Currently served before deadline; not yet delivery-certified","default":false},"publication":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Publication","description":"Immutable HTTP-delivery attestation bound to payload SHA256"},"periods":{"items":{"$ref":"#/components/schemas/Period"},"type":"array","title":"Periods"},"tracks":{"additionalProperties":{"$ref":"#/components/schemas/Track"},"type":"object","title":"Tracks"},"neso":{"items":{"anyOf":[{"type":"number"},{"type":"null"}]},"type":"array","title":"Neso","description":"NESO inputs frozen at inputCutoff, aligned with periods. Null means unavailable, not a missing model prediction. Later releases are not backfilled."},"nesoPublishedAt":{"items":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":"array","title":"Nesopublishedat","description":"Publication times of the selected frozen NESO inputs; null where absent."},"nesoCoverage":{"anyOf":[{"$ref":"#/components/schemas/NesoCoverage"},{"type":"null"}],"description":"Frozen input coverage across the full delivery window, separate from the observed-period sample used in Performance comparisons."}},"additionalProperties":true,"type":"object","required":["id","issueDate","status"],"title":"Forecast"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"NesoCoverage":{"properties":{"available":{"type":"integer","title":"Available","description":"Delivery periods with a frozen NESO input."},"expected":{"type":"integer","title":"Expected","description":"Total forecast delivery periods, not observed outturn periods."}},"type":"object","required":["available","expected"],"title":"NesoCoverage"},"Period":{"properties":{"start":{"type":"string","format":"date-time","title":"Start"},"end":{"type":"string","format":"date-time","title":"End"},"localLabel":{"type":"string","title":"Locallabel"},"settlementDate":{"type":"string","format":"date","title":"Settlementdate"},"settlementPeriod":{"type":"integer","title":"Settlementperiod"},"flags":{"additionalProperties":true,"type":"object","title":"Flags"}},"additionalProperties":true,"type":"object","required":["start","end","localLabel","settlementDate","settlementPeriod","flags"],"title":"Period"},"Track":{"properties":{"median":{"items":{"type":"number"},"type":"array","title":"Median","description":"Model predictions for all delivery periods, including periods with no NESO input."},"lower80":{"items":{"type":"number"},"type":"array","title":"Lower80"},"upper80":{"items":{"type":"number"},"type":"array","title":"Upper80"},"lower90":{"items":{"type":"number"},"type":"array","title":"Lower90"},"upper90":{"items":{"type":"number"},"type":"array","title":"Upper90"},"model":{"type":"string","title":"Model"},"modelFamily":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Modelfamily","description":"Frozen release family; absent/null in legacy issues."},"modelVersion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Modelversion","description":"Semantic model version, starting at 0.1.0 per family; not the API version."},"releaseManifestSHA256":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Releasemanifestsha256","description":"Exact immutable model release manifest hash, frozen at issuance; never inferred for old records."},"calibrationId":{"type":"string","title":"Calibrationid"},"operatorInput":{"type":"boolean","title":"Operatorinput","description":"Uses available pre-issuance NESO inputs alongside demand history, weather and calendar. Does not imply full NESO coverage. Available values may influence predictions across the window; missing inputs remain missing and later releases are not backfilled."}},"additionalProperties":true,"type":"object","required":["median","lower80","upper80","lower90","upper90","model","calibrationId","operatorInput"],"title":"Track"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VintageSummary":{"properties":{"id":{"type":"string","title":"Id"},"issueDate":{"type":"string","title":"Issuedate"},"status":{"type":"string","title":"Status"},"generatedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Generatedat"}},"type":"object","required":["id","issueDate","status","generatedAt"],"title":"VintageSummary"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}