{"openapi":"3.1.0","info":{"title":"FLOPS Ingestion API","description":"L1 Ingestion Layer - FLOPS Compute Intelligence Platform","version":"7.0.0"},"paths":{"/sla":{"get":{"tags":["sla"],"summary":"Sla Html","description":"Rendered HTML for human browsing.","operationId":"sla_html_sla_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/healthz":{"get":{"tags":["health"],"summary":"Healthz","operationId":"healthz_healthz_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Healthz Healthz Get"}}}}}}},"/v2/contributor/status":{"get":{"tags":["contributor"],"summary":"Contributor Status","description":"V7.5 Tech Ref §14.3 health check endpoint.","operationId":"contributor_status_v2_contributor_status_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-FLOPS-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Flops-Api-Key"}},{"name":"X-Partner-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Partner-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Contributor Status V2 Contributor Status Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/health":{"get":{"summary":"Health","operationId":"health_v2_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/metrics":{"get":{"summary":"Metrics","operationId":"metrics_metrics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v2/submit/fleet":{"post":{"summary":"Submit Fleet","description":"Ingest a fleet/FLCI operator submission through the 3-gate pipeline.\n\nGate 1: Pydantic schema (automatic via FastAPI)\nGate 2: Physical bounds enforcement\nGate 3: Z-score anomaly detection\nThen: DP noise injection + dual-write (Redis Stream + S3)","operationId":"submit_fleet_v2_submit_fleet_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-FLOPS-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Flops-Api-Key"}},{"name":"X-Partner-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Partner-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FleetSubmission"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/submit/cpu/fleet":{"post":{"summary":"Submit Cpu Fleet","description":"Ingest a CPU capacity/utilization submission (FLCI-CPU).\n\nGate 1: Pydantic schema (automatic via FastAPI)\nGate 2: CPU physical bounds (cores/threads/power geometry)\nThen: DP noise + dual-write (Redis Stream + S3 staging/audit)","operationId":"submit_cpu_fleet_v2_submit_cpu_fleet_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-FLOPS-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Flops-Api-Key"}},{"name":"X-Partner-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Partner-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CPUFleetSubmission"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/submit/cpu-contract":{"post":{"summary":"Submit Cpu Contract","description":"Ingest one CPU contract / lease rate (Lyrid Annex v1.0 §2, CLRI-CPU).\n\nPath matches the annex verbatim (`POST /v2/submit/cpu-contract`) —\ncontributors build against the document, so the document wins.\n\nRate limit is higher than the fleet families because a contract book\nis naturally many rows: a contributor backfilling 200 executed\ncontracts in one sync is normal traffic, not abuse.","operationId":"submit_cpu_contract_v2_submit_cpu_contract_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-FLOPS-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Flops-Api-Key"}},{"name":"X-Partner-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Partner-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CPUContractSubmission"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/submit/lender":{"post":{"summary":"Submit Lender","description":"Ingest lender submission with compliance gate (raw JSON) then schema validation.","operationId":"submit_lender_v2_submit_lender_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-FLOPS-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Flops-Api-Key"}},{"name":"X-Partner-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Partner-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/submit/smpi":{"post":{"summary":"Submit Smpi","description":"Ingest an SMPI secondary market transaction.","operationId":"submit_smpi_v2_submit_smpi_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-FLOPS-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Flops-Api-Key"}},{"name":"X-Partner-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Partner-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SMPITransaction"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/submit/clri":{"post":{"summary":"Submit Clri","description":"Ingest a CLRI lease rate submission.","operationId":"submit_clri_v2_submit_clri_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-FLOPS-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Flops-Api-Key"}},{"name":"X-Partner-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Partner-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CLRISubmission"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/submit/correct":{"post":{"summary":"Submit Correct","description":"Submit a fleet correction tied to an earlier submission_id (skips period dedupe).","operationId":"submit_correct_v2_submit_correct_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-FLOPS-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Flops-Api-Key"}},{"name":"X-Partner-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Partner-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FleetCorrectionSubmission"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/submit/validate":{"post":{"summary":"Submit Validate","description":"Dry-run validation; does not write to Redis, S3, or PostgreSQL.\n\nGated by the same contributor-key dependency as the live submit routes:\n/validate doubles as a pre-flight that proves a partner's key works\nbefore they post real data.","operationId":"submit_validate_v2_submit_validate_post","parameters":[{"name":"type","in":"query","required":true,"schema":{"enum":["fleet","lender","smpi","clri","sei","facility","facility_event"],"type":"string","description":"Submission pathway matching production endpoints","title":"Type"},"description":"Submission pathway matching production endpoints"},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-FLOPS-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Flops-Api-Key"}},{"name":"X-Partner-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Partner-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/submit/sei":{"post":{"summary":"Submit Sei","description":"SEI telemetry: one event JSON or {\"events\": [...]} batch. Fire-and-forget ACK.","operationId":"submit_sei_v2_submit_sei_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-FLOPS-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Flops-Api-Key"}},{"name":"X-Partner-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Partner-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/submit/facility":{"post":{"summary":"Submit Facility","description":"Ingest a FacilitySubmission (Tech Ref §10.5).\n\nGate 1: Pydantic schema (automatic via FastAPI; strict allow-list).\nGate 2: PUE consistency + range bounds (enforced in FacilitySubmission\n        model_validators; surface as schema_invalid / pue_consistency).\nGate 3: lightweight anomaly surface (p95 inlet + high PUE) — does not\n        DLQ; flagged in response envelope.\nThen: Redis stream + S3 staging + Postgres write (best-effort).","operationId":"submit_facility_v2_submit_facility_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-FLOPS-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Flops-Api-Key"}},{"name":"X-Partner-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Partner-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FacilitySubmission"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/submit/facility/event":{"post":{"summary":"Submit Facility Event","description":"Real-time FacilityEvent post (Tech Ref §10.12).\n\nStandalone form of the same FacilityEvent shape nested inside\nFacilitySubmission.availability_events. Used for availability-\nsensitive flows where the partner can't wait for the monthly\nrollup.","operationId":"submit_facility_event_v2_submit_facility_event_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-FLOPS-Api-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Flops-Api-Key"}},{"name":"X-Partner-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Partner-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FacilityEventSubmission"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AssetOwnership":{"type":"string","enum":["owner","orchestrator","reseller","broker"],"title":"AssetOwnership","description":"Who actually owns the silicon behind a submitted row.\n\nThis exists because the first CPU contributor (Lyrid) is an\nORCHESTRATOR — it manages capacity it does not own. That distinction\nis not cosmetic: if an orchestrator reports cores that physically sit\nin a cloud FLOPS already collects directly, naive aggregation\ndouble-counts the same hardware, and a price row from an orchestrator\nis a resale margin on top of an underlying rate, not a primary rate.\n\nOnly ``OWNER`` rows are primary observations. Everything else carries\n``attribution_risk`` and is held out of published index math until an\nexplicit de-duplication rule exists (see docs/methodology)."},"CLRISubmission":{"properties":{"gpu_sku":{"type":"string","title":"Gpu Sku"},"contract_term":{"type":"string","enum":["Spot","1mo","3mo","12mo","24mo","36mo"],"title":"Contract Term"},"rate_per_gpu_hour":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Rate Per Gpu Hour"},"total_contract_value_usd":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Total Contract Value Usd"},"gpu_count":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Gpu Count"},"contract_duration_days":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Contract Duration Days"},"contract_start_date":{"type":"string","title":"Contract Start Date"},"counterparty_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Counterparty Type"},"source_type":{"type":"string","enum":["public_scrape","broker","operator","operator_direct"],"title":"Source Type","default":"broker"},"bundled":{"type":"boolean","title":"Bundled","default":false}},"additionalProperties":true,"type":"object","required":["gpu_sku","contract_term","contract_start_date"],"title":"CLRISubmission","description":"CLRI rate submission; accepts v7 aliases (sku, term, contract_date, operator_direct).\n\nPhase H P0 #1 (2026-06-01): extra=\"ignore\" -> \"allow\" per the\nFleetSubmission docstring. CLRI contract-rate submissions with\ncounterparty-side annotations (lender_class, contract_jurisdiction,\netc.) per Submission Guide §5.x were silently dropped before this\nchange. Extras now flow through to persistence."},"CPUContractSubmission":{"properties":{"asset_ownership":{"anyOf":[{"$ref":"#/components/schemas/AssetOwnership"},{"type":"null"}],"description":"Who owns the silicon. 'owner' = primary observation. Omitted is treated as 'orchestrator' (fail-closed) and the row is held out of published index math."},"underlying_provider":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Underlying Provider","description":"Whose hardware this actually is, when asset_ownership != owner. Use 'undisclosed' if contractually unnameable."},"operator_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Operator Id"},"cpu_sku":{"type":"string","title":"Cpu Sku","description":"Processor family if known (amd_epyc, intel_xeon_scalable, x86_mixed)."},"cpu_model_raw":{"anyOf":[{"type":"string","maxLength":256},{"type":"null"}],"title":"Cpu Model Raw","description":"Verbatim contributor string, kept for triage when the SKU is unmapped."},"core_count_contracted":{"type":"integer","maximum":2000000.0,"minimum":1.0,"title":"Core Count Contracted","description":"vCPU count in this contract or VM configuration (NOT physical cores)."},"ram_gb_contracted":{"type":"number","maximum":1000000.0,"minimum":0.0,"title":"Ram Gb Contracted"},"storage_tb_contracted":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Storage Tb Contracted"},"rate_per_core_hour_usd":{"anyOf":[{"type":"number","maximum":10000.0,"minimum":0.0},{"type":"null"}],"title":"Rate Per Core Hour Usd","description":"USD per vCPU-hour (annex naming says 'core'; the unit is vCPU)."},"rate_per_vm_config_month_usd":{"anyOf":[{"type":"number","maximum":10000000.0,"minimum":0.0},{"type":"null"}],"title":"Rate Per Vm Config Month Usd","description":"USD per VM configuration per month."},"vm_config":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"title":"Vm Config","description":"{cores, ram_gb, storage_tb, gpu_count}. Required with the monthly rate."},"contract_term_months":{"type":"integer","maximum":120.0,"minimum":1.0,"title":"Contract Term Months","description":"1 for on-demand; 3/6/12/24/36 for term contracts."},"region":{"$ref":"#/components/schemas/Region"},"contract_start_date":{"type":"string","title":"Contract Start Date","description":"YYYY-MM-DD"},"rate_includes_support":{"type":"boolean","title":"Rate Includes Support","description":"True if managed support or SLA is bundled into the rate."},"rate_includes_power":{"type":"boolean","title":"Rate Includes Power","description":"True if power costs are included."},"workload_class":{"anyOf":[{"type":"string","enum":["web_app","database","batch_compute","ai_inference","storage_io","general"]},{"type":"null"}],"title":"Workload Class"},"currency":{"type":"string","maxLength":3,"minLength":3,"title":"Currency","default":"USD"},"fx_rate_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fx Rate Date","description":"YYYY-MM-DD of the FX rate used, if the contributor converted before sending."},"contract_end_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contract End Date","description":"YYYY-MM-DD"},"is_renewal":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Renewal","description":"True if this renews an existing contract rather than a new one."},"replaces_contract_ref":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Replaces Contract Ref","description":"Contributor's opaque reference to the prior contract, to link a renewal chain."},"rate_compute_only_usd":{"anyOf":[{"type":"number","maximum":10000.0,"minimum":0.0},{"type":"null"}],"title":"Rate Compute Only Usd","description":"Per-vCPU-hour rate with managed support/SLA stripped out. Lets a bundled retail contributor also feed the headline lease-rate series."},"source_type":{"$ref":"#/components/schemas/SourceType","default":"b2b"},"submission_source":{"$ref":"#/components/schemas/SubmissionSource","default":"manual"}},"additionalProperties":true,"type":"object","required":["cpu_sku","core_count_contracted","ram_gb_contracted","contract_term_months","region","contract_start_date","rate_includes_support","rate_includes_power"],"title":"CPUContractSubmission","description":"Contract / lease rate row — annex §2, feeds CLRI-CPU.\n\nOne record per contract executed or renewed."},"CPUFleetSubmission":{"properties":{"asset_ownership":{"anyOf":[{"$ref":"#/components/schemas/AssetOwnership"},{"type":"null"}],"description":"Who owns the silicon. 'owner' = primary observation. Omitted is treated as 'orchestrator' (fail-closed) and the row is held out of published index math."},"underlying_provider":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Underlying Provider","description":"Whose hardware this actually is, when asset_ownership != owner. Use 'undisclosed' if contractually unnameable."},"operator_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Operator Id"},"sku":{"type":"string","title":"Sku","description":"x86_mixed for most abstraction-layer infrastructure."},"cpu_model_raw":{"anyOf":[{"type":"string","maxLength":256},{"type":"null"}],"title":"Cpu Model Raw"},"vcpu_count":{"type":"integer","maximum":2000000.0,"minimum":1.0,"title":"Vcpu Count","description":"Total vCPUs allocated across the active fleet for this region/period."},"physical_core_count":{"anyOf":[{"type":"integer","maximum":1000000.0,"minimum":1.0},{"type":"null"}],"title":"Physical Core Count","description":"Optional; an abstraction layer usually cannot see this."},"server_count":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Server Count"},"utilization":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Utilization"},"memory_tb":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Memory Tb","description":"Total RAM provisioned across the fleet, TB."},"workload_dist":{"anyOf":[{"additionalProperties":{"type":"number"},"propertyNames":{"enum":["web_app","database","batch_compute","ai_inference","storage_io","general"]},"type":"object"},{"type":"null"}],"title":"Workload Dist"},"region":{"$ref":"#/components/schemas/Region"},"period_start":{"type":"string","title":"Period Start"},"period_end":{"type":"string","title":"Period End"},"facility_type":{"$ref":"#/components/schemas/FacilityType","default":"colo"},"source_type":{"$ref":"#/components/schemas/SourceType","default":"b2b"},"submission_source":{"$ref":"#/components/schemas/SubmissionSource","default":"manual"},"power_kw":{"anyOf":[{"type":"number","maximum":50000.0,"minimum":0.0},{"type":"null"}],"title":"Power Kw","description":"Optional: annex §1 states hardware telemetry is not accessible."},"monthly_ops_budget":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Monthly Ops Budget"}},"additionalProperties":true,"type":"object","required":["sku","vcpu_count","utilization","region","period_start","period_end"],"title":"CPUFleetSubmission","description":"vCPU allocation + utilization for one region-month — annex §3, FLCI-CPU."},"FacilityEvent":{"properties":{"event_type":{"type":"string","enum":["power_outage","cooling_failure","thermal_excursion","network_cutover","planned_maintenance"],"title":"Event Type"},"started_at":{"type":"string","title":"Started At","description":"ISO UTC timestamp"},"ended_at":{"type":"string","title":"Ended At","description":"ISO UTC timestamp; must be >= started_at"},"affected_rack_count":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Affected Rack Count"},"root_cause":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Root Cause"}},"additionalProperties":false,"type":"object","required":["event_type","started_at","ended_at"],"title":"FacilityEvent","description":"Availability event — see Contributor Tech Ref §10.4 Table 54.\n\nInline form: nested inside FacilitySubmission.availability_events.\nStandalone form: posted to /v2/submit/facility/event (FacilityEventSubmission\nbelow). This model carries only the event-shape fields; the standalone\nsubmission adds the parent facility_id + region scope so the event can\nbe linked to a facility without an enclosing FacilitySubmission."},"FacilityEventSubmission":{"properties":{"event_type":{"type":"string","enum":["power_outage","cooling_failure","thermal_excursion","network_cutover","planned_maintenance"],"title":"Event Type"},"started_at":{"type":"string","title":"Started At","description":"ISO UTC timestamp"},"ended_at":{"type":"string","title":"Ended At","description":"ISO UTC timestamp; must be >= started_at"},"affected_rack_count":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Affected Rack Count"},"root_cause":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Root Cause"},"facility_id":{"type":"string","minLength":1,"title":"Facility Id"}},"additionalProperties":false,"type":"object","required":["event_type","started_at","ended_at","facility_id"],"title":"FacilityEventSubmission","description":"Standalone availability event — POST /v2/submit/facility/event (§10.12).\n\nWraps FacilityEvent shape with facility_id so the event can be linked\nto its facility without a parent FacilitySubmission envelope. Used for\nreal-time posting (availability-sensitive flows)."},"FacilitySubmission":{"properties":{"facility_id":{"type":"string","minLength":1,"title":"Facility Id","description":"Operator-side facility ID; hashed on ingest."},"region":{"$ref":"#/components/schemas/Region"},"period_start":{"type":"string","title":"Period Start"},"period_end":{"type":"string","title":"Period End"},"measured_pue":{"type":"number","maximum":2.5,"minimum":1.05,"title":"Measured Pue"},"facility_kw":{"type":"number","maximum":200000.0,"exclusiveMinimum":0.0,"title":"Facility Kw"},"it_kw":{"type":"number","maximum":200000.0,"exclusiveMinimum":0.0,"title":"It Kw"},"cooling_kw":{"anyOf":[{"type":"number","maximum":200000.0,"minimum":0.0},{"type":"null"}],"title":"Cooling Kw"},"inlet_temp_avg_c":{"anyOf":[{"type":"number","maximum":40.0,"minimum":10.0},{"type":"null"}],"title":"Inlet Temp Avg C"},"inlet_temp_p95_c":{"anyOf":[{"type":"number","maximum":50.0,"minimum":10.0},{"type":"null"}],"title":"Inlet Temp P95 C"},"rack_count":{"anyOf":[{"type":"integer","maximum":100000.0,"minimum":1.0},{"type":"null"}],"title":"Rack Count"},"gpu_rack_count":{"anyOf":[{"type":"integer","maximum":100000.0,"minimum":0.0},{"type":"null"}],"title":"Gpu Rack Count"},"availability_events":{"anyOf":[{"items":{"$ref":"#/components/schemas/FacilityEvent"},"type":"array"},{"type":"null"}],"title":"Availability Events"}},"additionalProperties":false,"type":"object","required":["facility_id","region","period_start","period_end","measured_pue","facility_kw","it_kw"],"title":"FacilitySubmission","description":"Monthly facility instrumentation — Contributor Tech Ref §10.3 Table 37/§10.5.\n\nBounds per §12.2 FacilitySubmission Validation:\n  * measured_pue in [1.05, 2.50] (physical plausibility)\n  * facility_kw, it_kw > 0 (zero indicates missing meter)\n  * |measured_pue - facility_kw/it_kw| <= 0.05 (consistency)\n  * inlet_temp_avg_c in [10, 40] (ASHRAE TC 9.9 envelope plausibility)\n  * each FacilityEvent: ended_at >= started_at"},"FacilityType":{"type":"string","enum":["colo","owned","hyperscaler","orchestration","neocloud"],"title":"FacilityType"},"FleetCorrectionSubmission":{"properties":{"operator_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Operator Id","description":"Optional stable operator key for salted hash (body or use connection metadata)."},"sku":{"type":"string","title":"Sku"},"gpu_count":{"type":"integer","maximum":500000.0,"minimum":1.0,"title":"Gpu Count"},"utilization":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Utilization"},"power_kw":{"type":"number","maximum":50000.0,"minimum":0.0,"title":"Power Kw"},"workload_dist":{"additionalProperties":{"type":"number"},"propertyNames":{"enum":["train","infer","finetune"]},"type":"object","title":"Workload Dist"},"region":{"$ref":"#/components/schemas/Region"},"period_start":{"type":"string","title":"Period Start"},"period_end":{"type":"string","title":"Period End"},"facility_type":{"$ref":"#/components/schemas/FacilityType","default":"colo"},"source_type":{"$ref":"#/components/schemas/SourceType"},"submission_source":{"$ref":"#/components/schemas/SubmissionSource","default":"manual"},"monthly_ops_budget":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Monthly Ops Budget"},"lifetime_months":{"anyOf":[{"type":"integer","maximum":120.0,"minimum":1.0},{"type":"null"}],"title":"Lifetime Months"},"original_submission_id":{"type":"string","minLength":8,"title":"Original Submission Id"}},"additionalProperties":true,"type":"object","required":["sku","gpu_count","utilization","power_kw","workload_dist","region","period_start","period_end","source_type","original_submission_id"],"title":"FleetCorrectionSubmission","description":"Fleet payload plus original submission id for POST /v2/submit/correct."},"FleetSubmission":{"properties":{"operator_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Operator Id","description":"Optional stable operator key for salted hash (body or use connection metadata)."},"sku":{"type":"string","title":"Sku"},"gpu_count":{"type":"integer","maximum":500000.0,"minimum":1.0,"title":"Gpu Count"},"utilization":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Utilization"},"power_kw":{"type":"number","maximum":50000.0,"minimum":0.0,"title":"Power Kw"},"workload_dist":{"additionalProperties":{"type":"number"},"propertyNames":{"enum":["train","infer","finetune"]},"type":"object","title":"Workload Dist"},"region":{"$ref":"#/components/schemas/Region"},"period_start":{"type":"string","title":"Period Start"},"period_end":{"type":"string","title":"Period End"},"facility_type":{"$ref":"#/components/schemas/FacilityType","default":"colo"},"source_type":{"$ref":"#/components/schemas/SourceType"},"submission_source":{"$ref":"#/components/schemas/SubmissionSource","default":"manual"},"monthly_ops_budget":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Monthly Ops Budget"},"lifetime_months":{"anyOf":[{"type":"integer","maximum":120.0,"minimum":1.0},{"type":"null"}],"title":"Lifetime Months"}},"additionalProperties":true,"type":"object","required":["sku","gpu_count","utilization","power_kw","workload_dist","region","period_start","period_end","source_type"],"title":"FleetSubmission","description":"FleetSubmission per Submission Guide v7 Part 2.\n\nPhase H P0 #1 (2026-06-01): switched from extra=\"ignore\" to \"allow\"\nto stop the SILENT data-drop class. Partners submitting valid Tier 2\ninfra_context (or other documented extensions) previously got 200 OK\nwhile the extras were silently discarded at the Pydantic boundary —\nworst-class trust-eroding bug. With \"allow\", extras land in\nmodel_extra AND flow through .model_dump() into the persistence\nrecord, so the downstream JSONB writes preserve them. Phase H proper\n(H-1) will schematize the Tier 2/3 fields and convert this back to\n\"forbid\" with a curated allow-list. Until then \"allow\" + visibility\nlogging is the operator-safe path (no breaking change to partners,\nextras preserved, surface visible for audit)."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"Region":{"type":"string","enum":["us_east","us_west","eu_west","ap_southeast","africa","global"],"title":"Region"},"SMPITransaction":{"properties":{"purchase_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Purchase Date"},"transaction_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Transaction Date"},"gpu_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gpu Model"},"sku":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sku"},"quantity":{"type":"integer","minimum":1.0,"title":"Quantity"},"unit_price_usd":{"type":"number","exclusiveMinimum":0.0,"title":"Unit Price Usd"},"memory_gb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Memory Gb"},"form_factor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Form Factor"},"source_type":{"type":"string","enum":["itad","reseller","marketplace"],"title":"Source Type","default":"marketplace"},"price_basis":{"type":"string","enum":["close","ask"],"title":"Price Basis","default":"close"},"seller_id_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Seller Id Hash"},"condition_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Condition Description"},"shipping_cost_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Shipping Cost Usd"},"warranty_months":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Warranty Months"},"quality_tier":{"anyOf":[{"type":"string","enum":["enterprise","refurbished","as_is"]},{"type":"null"}],"title":"Quality Tier"},"region":{"anyOf":[{"$ref":"#/components/schemas/Region"},{"type":"null"}]}},"additionalProperties":true,"type":"object","required":["quantity","unit_price_usd"],"title":"SMPITransaction","description":"SMPI transaction: legacy gpu_model/purchase_date plus v7 sku/quality_tier/region/transaction_date.\n\nPhase H P0 #1 (2026-06-01): extra=\"ignore\" -> \"allow\" per the\nFleetSubmission docstring. SMPI submissions that include lender-side\nenrichment fields (institution_tier, reseller_attestation, etc.) per\nSubmission Guide §4.x were silently dropped before this change. Now\nextras flow to model_dump() and the Redis-stream persistence record."},"SourceType":{"type":"string","enum":["public","b2b","corporate"],"title":"SourceType","description":"Determines weight in FLCI/CLRI weighted median calculation."},"SubmissionSource":{"type":"string","enum":["manual","agent_v1","sdk"],"title":"SubmissionSource","description":"Tracks how a fleet submission was generated for validation tuning."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}