{"openapi":"3.1.0","info":{"title":"Prospector Labs Energy Data API","description":"## What's inside\n\n- 48,895 interconnection projects, 26,118 first-party (24,303 direct from ISO/RTO filings, 1,815 from state programs); the remainder reach us only via LBNL's annual file or a competitor's product. Live per-market breakdown at /catalog\n- **5.4M+** distributed generation installations from 16 state programs\n- **7,452** data center facilities with operator, market, and capacity data\n- **6,593** developer profiles with track records and tier classification\n- **38** data sources monitored for freshness\n- **130** REST endpoints across the same database, plus an MCP server with 32 tools\n\n## Quick start\n\nGet a free key, then try one of these:\n\n```\ncurl \"https://api.prospectorlabs.io/stats\" \\\n  -H \"X-API-Key: <your key>\"\n```\n\n- **Find ITC deals** — `GET /deals/itc?state=NJ&min_rate=0.40`\n- **Score a project** — `GET /score/PJM-AE2-123`\n- **Calculate tax credits** — `GET /tax-credits/calculate?technology=Solar&capacity_mw=2&state=NJ`\n- **Data center pipeline** — `GET /datacenters/pipeline?state=VA`\n- **Developer lookup** — `GET /developers/search?q=NextEra`\n- **Aggregate queue stats** — `GET /stats`\n\n## Authentication\n\nAPI key via the `X-API-Key` header (or `?api_key=` query param).\n[Get a free key →](/register)\n\n## Pricing\n\nFree · Access — Talk to us · Enterprise — Talk to us. [See details](https://api.prospectorlabs.io/plans).\n\n## For AI agents (MCP)\n\n```\npip install prospector-energy-mcp\n```\n\n32 tools for Claude, GPT, Cursor, and any MCP-aware host. Same database, same auth.\n[GitHub](https://github.com/OwenCoonahan/prospector-platform) · [PyPI](https://pypi.org/project/prospector-energy-mcp/)\n\n## Agentic payments (optional)\n\nAgents that don't hold an API key can pay per call. Three rails supported when the server has them enabled:\n\n- **x402** — Coinbase's HTTP 402 standard, USDC on Base\n- **MPP** — Machine Payments Protocol, USDC on Tempo (parity with the MCP server)\n- **Stripe Agent Toolkit** — Stripe PaymentIntent or prepaid credits\n\nCorpus-level aggregates (`/stats`, `/coverage`, `/catalog/data`, `/plans`) and the discovery files never require payment or a key. Anything returning per-project rows does. See [`/pricing-info`](/pricing-info) for per-endpoint costs + which rails are live right now.\n\n## Discovery files\n\n- `/llms.txt` — short orientation for LLM agents\n- `/llms-full.txt` — complete endpoint reference with examples\n- `/openapi.json` — machine-readable spec\n- `/source-freshness` — per-source last-updated and validation state\n- `/pricing-info` — per-call costs + enabled payment rails\n","version":"1.0.0"},"paths":{"/":{"get":{"tags":["System"],"summary":"API welcome and orientation","description":"Bare-URL landing for humans and agents. Returns a tiny JSON manifest with links to docs, register, OpenAPI spec, and pricing.","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"name":"Prospector Labs Energy Data API","version":"1.0.0","description":"Energy infrastructure intelligence for investors, developers, and AI agents.","links":{"docs":"/docs","openapi":"/openapi.json","register":"/register","health":"/health","source_freshness":"/source-freshness","website":"https://prospectorlabs.io"},"mcp_server":"pip install prospector-energy-mcp","plans":"Free · Access — Talk to us · Enterprise — Talk to us","contact":"owen@prospectorlabs.io"}}}}}}},"/health":{"get":{"tags":["System"],"summary":"Health check with content-level validation","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"status":"ok","version":"1.0.0","timestamp":"2026-06-06T14:00:00Z"}}}}},"description":"Returns OK if all critical row-count thresholds are met. Use for load balancer probes."}},"/health/detailed":{"get":{"tags":["System"],"summary":"Per-database health with row counts","description":"Breaks down health by database (master, dg, grid, developer) with row counts and file sizes.","operationId":"health_detailed_health_detailed_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"status":"ok","databases":[{"name":"master.db","row_count":47787,"size_mb":184.2,"last_modified":"2026-06-06T11:00:00Z"},{"name":"dg.db","row_count":5421000,"size_mb":1840.0,"last_modified":"2026-05-14T11:00:00Z"}]}}}}}}},"/health/freshness":{"get":{"tags":["System"],"summary":"Per-pipeline freshness with staleness verdicts","description":"Every registered pipeline with its last success, age in hours, its declared maximum age, and a `FRESH` / `STALE` / `NEVER` verdict.\n\nThis is the machine-readable half of `/health` — poll it to alert on a source going dark. ","operationId":"health_freshness_health_freshness_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"checked_at":"2026-08-11T03:03:21.669220+00:00","pipelines":[{"pipeline":"direct_lmp","last_success":"2026-08-06T00:54:00.844231+00:00","age_hours":122.2,"max_age_hours":48,"status":"STALE"},{"pipeline":"eia_860","last_success":"2026-08-10T13:00:01.874226+00:00","age_hours":14.1,"max_age_hours":1440,"status":"OK"}],"stale":["direct_lmp","pjm_lmp"],"never":[],"_status_dist":[{"status":"skipped","n":185,"newest":"2026-08-10T13:30:04.523498+00:00"},{"status":"error","n":62,"newest":"2026-08-06T00:54:00.869368+00:00"}],"stale_count":2,"never_count":0}}}}}}},"/queue/integrity":{"get":{"tags":["System"],"summary":"Queue data-trust snapshot: counts, coverage, and regressions","description":"Per-ISO active/operational counts, key-field coverage (developer, COD, queue date, county, parent, POI substation), permit-source freshness, and any zombie or stale sources versus the last baseline. One call to see what the queue layer actually contains. ","operationId":"queue_integrity_queue_integrity_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"snapshot":{"generated_at":"2026-08-11T03:00:00Z","regions":{"PJM":{"total":8777,"active":4212,"operational":1985,"last_change":"2026-08-10 13:02:41","energized":1721,"coverage":{"developer":96.4,"queue_date":99.8,"cod":71.2,"county":88.1,"parent":34.2,"poi_substation":61.7}}},"permits":{"tx_abatement":{"permits":1204,"matched":388,"last":"2026-08-09 11:20:03"}},"zombies":[],"stale_sources":[]},"alerts":[],"has_baseline":true}}}}}}},"/validate":{"get":{"tags":["System"],"summary":"Validate enrichment coverage","description":"Returns coverage of key enrichment fields (tax credit data, milestones, geocoding).","operationId":"validate_enrichments_validate_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"total_projects":47787,"coverage":{"geocoded":0.91,"ia_status":0.62,"developer_tier":0.84,"tax_credit_eligibility":0.76,"construction_stage":0.65}}}}}}}},"/manifest.json":{"get":{"tags":["System"],"summary":"Capability manifest for agents","operationId":"manifest_manifest_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"name":"Prospector Labs Energy Data API","version":"1.0.0","capabilities":["projects","deals","tax_credits","developers","datacenters"]}}}}},"description":"Machine-readable manifest for AI agents discovering this API."}},"/llms.txt":{"get":{"tags":["System"],"summary":"Short LLM orientation file","description":"Plain-text orientation for LLM agents, auto-generated from the live OpenAPI spec so it can't drift. Pair with /llms-full.txt for the full reference.","operationId":"llms_txt_llms_txt_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"},"example":"# Prospector Labs Energy Data API\\n\\n> Energy infrastructure intelligence for investors, developers, and AI agents.\\n\\n- **Coverage:** 48,895 interconnection projects, 26,118 first-party (24,303 direct from ISO/RTO filings, 1,815 from state programs); the remainder reach us only via LBNL's annual file or a competitor's product. Live per-market breakdown at /catalog\\n- **5.4M+** distributed generation installations from 16 state programs\\n..."}}}}}},"/pricing-info":{"get":{"tags":["System"],"summary":"Per-call pricing + enabled payment rails (for agents)","description":"Discovery endpoint for agents. Returns per-endpoint costs by tier (free / standard $0.01 / premium $0.05 / pro $0.10) and which agentic payment schemes the server currently accepts (x402, MPP, Stripe). Free for everyone.","operationId":"pricing_info_pricing_info_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"pricing_by_tier":{"free":{"price_usd":0.0},"standard":{"price_usd":0.01},"premium":{"price_usd":0.05},"pro":{"price_usd":0.1}},"endpoints":{"free":{"price_usd":0.0,"endpoints":["GET /stats","GET /source-freshness","..."]},"standard":{"price_usd":0.01,"endpoints":["GET /projects","GET /developers","..."]},"premium":{"price_usd":0.05,"endpoints":["GET /deals/itc","GET /tax-credits/calculate","..."]},"pro":{"price_usd":0.1,"endpoints":["GET /export/projects","POST /query"]}},"rails_enabled":{"x402":true,"mpp":true,"stripe":false},"notes":["Authenticated requests (X-API-Key) follow tier quotas, not per-call pricing.","Unauthenticated agentic requests to priced endpoints return HTTP 402 with payment requirements."]}}}}}}},"/llms-full.txt":{"get":{"tags":["System"],"summary":"Full markdown API reference for LLM agents","description":"Complete markdown reference with every endpoint, parameters, and example response. Generated from the live OpenAPI spec on every request, so it can never drift from the actual API.","operationId":"llms_full_txt_llms_full_txt_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"},"example":"# Prospector Labs Energy Data API — Full Reference\\n\\n> Energy infrastructure intelligence...\\n\\n## Projects\\n\\n### `GET /projects` — List & filter interconnection queue projects\\n\\n..."}}}}}},"/source-freshness":{"get":{"tags":["System"],"summary":"Per-source freshness across all 38 data sources","description":"Returns last_checked / last_changed timestamps for every upstream source. The single best 'is our data still good' check. Public — no key required.","operationId":"source_freshness_source_freshness_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"timestamp":"2026-06-06T14:00:00Z","total_sources":38,"sources":[{"database":"master.db","source":"ercot","records":1924,"last_checked":"2026-06-06T11:00:03","last_changed":"2026-05-06T11:00:09","unchecked_records":0}]}}}}}}},"/changes":{"get":{"tags":["Projects"],"summary":"Queue change feed — what changed since yesterday","description":"New queue entries, withdrawals, status changes, and field updates, captured by the daily snapshot/diff that runs with every queue refresh.\n\n**Common queries**\n- Yesterday's changes in PJM: `?since_days=1&region=PJM`\n- New projects this week: `?since_days=7&change_type=new_project`\n- One developer's activity: `?since_days=30&developer=NextEra`","operationId":"list_changes_changes_get","parameters":[{"name":"since_days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":1,"description":"Look back N days","default":1,"title":"Since Days"},"description":"Look back N days"},{"name":"region","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by ISO/region (e.g., PJM, MISO)","title":"Region"},"description":"Filter by ISO/region (e.g., PJM, MISO)"},{"name":"change_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"new_project | status_change | field update type","title":"Change Type"},"description":"new_project | status_change | field update type"},{"name":"developer","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by project developer (matches current record)","title":"Developer"},"description":"Filter by project developer (matches current record)"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"total":9512,"page":1,"per_page":100,"data":[{"detected_at":"2026-06-10T11:04:22","queue_id":"ERCOT-24INR0455","region":"ERCOT","change_type":"status_change","field_name":"status","old_value":"Active","new_value":"Withdrawn","project_name":"Caprock BESS","developer_canonical":"Example Energy Partners","capacity_mw":150.0,"type_std":"Storage","state":"TX"}]}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/changes/summary":{"get":{"tags":["Projects"],"summary":"Aggregated queue-change intelligence","description":"Daily change counts by type, withdrawals by region and developer, and new capacity entering each queue — the substrate for the distress signal and the Glass change feed.","operationId":"changes_summary_changes_summary_get","parameters":[{"name":"since_days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":1,"description":"Look back N days","default":7,"title":"Since Days"},"description":"Look back N days"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"since_days":7,"by_day":[{"day":"2026-06-10","change_type":"status_change","count":9512},{"day":"2026-06-10","change_type":"new_project","count":15}],"withdrawals_by_region":[{"region":"PJM","withdrawn":44,"withdrawn_mw":6120.5}],"top_withdrawing_developers":[{"developer":"Example Energy Partners","withdrawn":6,"withdrawn_mw":890.0}],"new_entries_by_region":[{"region":"MISO","new_projects":12,"new_mw":2240.0}]}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/projects":{"get":{"tags":["Projects"],"summary":"List & filter interconnection queue projects","operationId":"list_projects_projects_get","parameters":[{"name":"iso","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by ISO/region (e.g., PJM, MISO)","title":"Iso"},"description":"Filter by ISO/region (e.g., PJM, MISO)"},{"name":"region","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Alias for iso — filter by ISO/region (QUERY-01)","title":"Region"},"description":"Alias for iso — filter by ISO/region (QUERY-01)"},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},{"name":"fuel_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by technology type","title":"Fuel Type"},"description":"Filter by technology type"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"developer","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Developer"}},{"name":"capacity_min","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Capacity Min"}},{"name":"capacity_max","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Capacity Max"}},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Queue date from (YYYY-MM-DD)","title":"Date From"},"description":"Queue date from (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Queue date to (YYYY-MM-DD)","title":"Date To"},"description":"Queue date to (YYYY-MM-DD)"},{"name":"energy_community","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by energy community eligibility","title":"Energy Community"},"description":"Filter by energy community eligibility"},{"name":"low_income","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by low-income community eligibility","title":"Low Income"},"description":"Filter by low-income community eligibility"},{"name":"has_tax_credit","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by tax credit eligibility","title":"Has Tax Credit"},"description":"Filter by tax credit eligibility"},{"name":"construction_stage","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by construction stage (early, mid, late, construction, operational, withdrawn)","title":"Construction Stage"},"description":"Filter by construction stage (early, mid, late, construction, operational, withdrawn)"},{"name":"study_phase","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by study phase (e.g., SIS, Feasibility, GIA, Facilities)","title":"Study Phase"},"description":"Filter by study phase (e.g., SIS, Feasibility, GIA, Facilities)"},{"name":"ia_status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by IA status (e.g., IA Executed, Facility Study)","title":"Ia Status"},"description":"Filter by IA status (e.g., IA Executed, Facility Study)"},{"name":"min_confidence","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":1,"minimum":0},{"type":"null"}],"description":"Minimum construction stage confidence (0.0-1.0)","title":"Min Confidence"},"description":"Minimum construction stage confidence (0.0-1.0)"},{"name":"developer_tier","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by developer tier (independent, mid_platform, major_utility, etc.)","title":"Developer Tier"},"description":"Filter by developer tier (independent, mid_platform, major_utility, etc.)"},{"name":"investable","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by investable flag","title":"Investable"},"description":"Filter by investable flag"},{"name":"needs_capital","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by developer needs capital","title":"Needs Capital"},"description":"Filter by developer needs capital"},{"name":"min_score","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum investability score (0-100)","title":"Min Score"},"description":"Minimum investability score (0-100)"},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort field","default":"id","title":"Sort"},"description":"Sort field"},{"name":"order","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"asc or desc","default":"asc","title":"Order"},"description":"asc or desc"},{"name":"population","in":"query","required":false,"schema":{"type":"string","description":"Queue population: 'transmission' (default — the ISO's published transmission interconnection queue) or 'all' (also distribution/WDAT + DG-program rows)","default":"transmission","title":"Population"},"description":"Queue population: 'transmission' (default — the ISO's published transmission interconnection queue) or 'all' (also distribution/WDAT + DG-program rows)"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":[{"id":"PJM-AE2-123","region":"PJM","state":"NJ","developer":"NextEra Energy Resources","developer_tier":"major_utility","type":"Solar","type_std":"Solar","status":"IA Executed","status_std":"Active","capacity_mw":150.0,"queue_date":"2023-04-12","cod":"2026-12-31","construction_stage":"late","construction_stage_confidence":0.92,"study_phase":"IA Executed","ia_status":"IA Executed","energy_community_eligible":true,"low_income_eligible":false,"tax_credit_type":"ITC","estimated_credit_value":67500000,"investable":true,"investability_score":78}],"meta":{"total":17245,"page":1,"per_page":50,"pages":345}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Search energy projects. 48,895 interconnection projects, 26,118 first-party (24,303 direct from ISO/RTO filings, 1,815 from state programs); the remainder reach us only via LBNL's annual file or a competitor's product. Live per-market breakdown at /catalog. Supports filtering by state, ISO, fuel type, capacity, queue date, construction stage, study phase, developer, and tax credit eligibility.\n\n**Common queries**\n- All solar in Texas: `?state=TX&fuel_type=Solar`\n- Late-stage construction in PJM: `?iso=PJM&construction_stage=late`\n- ITC-eligible Northeast battery storage: `?fuel_type=Storage&energy_community=true&state=NJ`\n- High-score investable: `?investable=true&min_score=70&sort=investability_score&order=desc`"}},"/projects/milestones/summary":{"get":{"tags":["Projects"],"summary":"Milestone fill-rates and construction-stage distribution","description":"Aggregate view of how complete the milestone data is across the queue. Useful for data-quality dashboards and trust signals.","operationId":"milestones_summary_projects_milestones_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"total_projects":47814,"total_with_milestones":31264,"ia_status_distribution":{"Withdrawn":6076,"In Progress (unknown study)":5049,"System Impact Study":4859,"IA Executed":4847,"Facility Study":2885,"Feasibility Study":1970,"Operational":1440,"Construction":30},"construction_stage_distribution":{"withdrawn":30103,"operational":7602,"early":4041,"late":2390,"mid":1759,"construction":1231,"suspended":483},"avg_confidence_by_stage":{"withdrawn":1.0,"operational":1.0,"suspended":0.989,"late":0.9,"mid":0.742,"construction":0.625,"early":0.584},"milestone_fill_rates":{"ia_date":2407,"actual_cod":2787,"study_phase":12466,"backfeed_date":1052,"ia_status":29462}}}}}}}},"/projects/{project_id}":{"get":{"tags":["Projects"],"summary":"Full project detail with enrichment fields","description":"Returns every column for a single project, including milestones, tax-credit eligibility, geocoding, and developer fingerprint.","operationId":"get_project_projects__project_id__get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"region","in":"query","required":false,"schema":{"type":"string","title":"Region"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"id":"ERCOT-INR21INR0123","region":"ERCOT","state":"TX","county":"Pecos","developer":"Lightsource bp","type":"Solar + Storage","capacity_mw":250.0,"queue_date":"2022-08-05","cod":"2025-09-30","status_std":"Active","construction_stage":"construction","construction_stage_confidence":0.71,"lat":30.8821,"lon":-102.3431,"energy_community_eligible":true,"low_income_eligible":false,"domestic_content_eligible":true,"tax_credit_type":"ITC","tax_credit_pct":0.4,"estimated_credit_value":95000000}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/projects/{project_id}/ownership":{"get":{"tags":["Projects"],"summary":"Project owners from EIA-860 (Schedule 4 + operator-inferred)","description":"Ownership records matched to the queue project. `source=eia_860_ownership` rows are explicit Schedule 4 filings with `fraction_owned`; `source=eia_860_operator` rows infer the operating utility as sole owner (single-owner plants don't file Schedule 4). Owner is not the developer.","operationId":"get_project_ownership_projects__project_id__ownership_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"region","in":"query","required":false,"schema":{"type":"string","title":"Region"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"queue_id":"ERCOT-21INR0099","region":"ERCOT","owners":[{"owner_name":"Brazos Solar Holdings LLC","owner_utility_id":64321,"fraction_owned":1.0,"owner_city":"Austin","owner_state":"TX","source":"eia_860_ownership","report_date":"2025-12-01"}]}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search":{"get":{"tags":["Projects"],"summary":"Full-text search across projects, developers, and counties","operationId":"search_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query","title":"Q"},"description":"Search query"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"query":"vistra","results":[{"kind":"developer","name":"Vistra Energy","match_score":1.0,"project_count":47,"total_capacity_mw":6800.0},{"kind":"project","id":"ERCOT-21INR0099","name":"Brazos Wind","developer":"Vistra Energy","capacity_mw":200.0,"state":"TX"}]}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Single-query search across queue projects, developer aliases, and county names. Best for autocomplete / cmd-K experiences."}},"/score/{project_id}":{"get":{"tags":["Projects"],"summary":"Investability score breakdown for a project","description":"Returns the 0-100 investability score plus the component sub-scores (developer tier, milestone progress, tax-credit value, ISO posture, deal cleanliness). Use this to defend a recommendation in writing.","operationId":"score_score__project_id__get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"region","in":"query","required":false,"schema":{"type":"string","title":"Region"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"project_id":"PJM-AE2-123","investability_score":78,"grade":"B+","components":{"developer_tier":{"score":90,"weight":0.2,"value":"major_utility"},"milestone_progress":{"score":85,"weight":0.25,"value":"IA Executed"},"tax_credit_value":{"score":80,"weight":0.2,"value":"$67.5M ITC"},"iso_posture":{"score":65,"weight":0.15,"value":"PJM queue reform"},"deal_cleanliness":{"score":70,"weight":0.2,"value":"single-developer"}},"explanation":"Strong major-utility developer with IA in hand and energy-community ITC bonus. Discounted for PJM queue uncertainty."}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/stats":{"get":{"tags":["Projects"],"summary":"Aggregate queue statistics across the full database","operationId":"stats_stats_get","parameters":[{"name":"population","in":"query","required":false,"schema":{"type":"string","description":"Queue population: 'transmission' (default — ISO published transmission queue) or 'all'","default":"transmission","title":"Population"},"description":"Queue population: 'transmission' (default — ISO published transmission queue) or 'all'"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":{"total_projects":47787,"total_capacity_gw":6995.1,"by_iso":[{"iso":"CAISO","count":10388,"total_mw":849580.4},{"iso":"PJM","count":10254,"total_mw":962577.3},{"iso":"MISO","count":5550,"total_mw":1033050.3},{"iso":"ERCOT","count":3897,"total_mw":824250.6},{"iso":"NYISO","count":3009,"total_mw":571348.1},{"iso":"SPP","count":2975,"total_mw":604039.3},{"iso":"ISO-NE","count":1911,"total_mw":207472.0}],"by_fuel_type":[{"fuel_type":"Solar","count":17245,"total_mw":1467087.0},{"fuel_type":"Storage","count":7334,"total_mw":925345.3},{"fuel_type":"Wind","count":6525,"total_mw":1328573.7},{"fuel_type":"Gas","count":4221,"total_mw":1258566.4},{"fuel_type":"Solar + Storage","count":4137,"total_mw":716052.4}],"tax_credits":{"eligible_projects":36404,"energy_community_projects":18220,"low_income_projects":33565,"estimated_total_value":3603618305437.0}}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Top-line counts and capacity totals broken down by ISO, fuel type, and status. The single best 'lay of the land' endpoint. Cached for 5 minutes."}},"/developers":{"get":{"tags":["Developers"],"summary":"Developer leaderboard by capacity, tier, or activity","operationId":"developers_developers_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Per Page"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"total_projects, active_capacity_mw, completion_rate, canonical_name","default":"total_projects","title":"Sort"},"description":"total_projects, active_capacity_mw, completion_rate, canonical_name"},{"name":"order","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"desc","title":"Order"}},{"name":"tier","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"major_utility, major_ipp, mid_platform, pe_fund, independent, unknown","title":"Tier"},"description":"major_utility, major_ipp, mid_platform, pe_fund, independent, unknown"},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by HQ state or portfolio state","title":"State"},"description":"Filter by HQ state or portfolio state"},{"name":"min_projects","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"title":"Min Projects"}},{"name":"needs_capital","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter to developers needing capital","title":"Needs Capital"},"description":"Filter to developers needing capital"},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search name","title":"Q"},"description":"Search name"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":[{"developer_id":142,"canonical_name":"NextEra Energy Resources","tier":"major_utility","total_projects":412,"total_capacity_mw":38420.0,"operating_capacity_mw":21500.0,"in_construction_mw":4900.0,"states_active":["TX","FL","CA","NM","OK"],"primary_technologies":["Solar","Wind","Storage"],"needs_capital":false}],"meta":{"total":6593,"page":1,"per_page":50}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Returns enriched developer records with track record. Use `?tier=major_utility` to scope to a specific tier or `?needs_capital=true` for capital-seeking developers."}},"/developers/search":{"get":{"tags":["Developers"],"summary":"Fuzzy developer name search with alias resolution","operationId":"developers_search_developers_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query","title":"Q"},"description":"Search query"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"query":"nexterra","results":[{"developer_id":142,"canonical_name":"NextEra Energy Resources","aliases":["NextEra Energy","NEER","FPL Energy"],"score":0.93,"project_count":412}]}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Handles common typos, suffix variations (Inc/LLC), and joint-venture aliases. Use for autocomplete or quick lookup."}},"/developers/stats":{"get":{"tags":["Developers"],"summary":"Aggregate developer statistics by tier","operationId":"developers_stats_developers_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"total_developers":6593,"by_tier":[{"tier":"independent","count":4892,"total_capacity_mw":142000.0},{"tier":"mid_platform","count":1245,"total_capacity_mw":380000.0},{"tier":"major_utility","count":89,"total_capacity_mw":920000.0},{"tier":"oil_major","count":27,"total_capacity_mw":145000.0}],"needs_capital_count":1842,"active_states_avg":3.2}}}}},"description":"Distribution of the 6,593 developer profiles across tiers. Useful for sizing a sales motion or content piece."}},"/developers/{developer_id}":{"get":{"tags":["Developers"],"summary":"Full developer profile with relationships","description":"Returns aliases, regions, technology mix, parent/subsidiary relationships, and capital posture.","operationId":"developer_detail_developers__developer_id__get","parameters":[{"name":"developer_id","in":"path","required":true,"schema":{"type":"string","title":"Developer Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"developer_id":142,"canonical_name":"NextEra Energy Resources","tier":"major_utility","aliases":["NEER","FPL Energy","NextEra Energy Resources LLC"],"headquarters_state":"FL","parent_company":"NextEra Energy Inc.","states_active":["TX","FL","CA","NM","OK","KS","IA","WI","MN"],"primary_technologies":["Solar","Wind","Storage"],"tax_credit_activity":"high","needs_capital":false,"contact_published":false}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/developers/{developer_id}/projects":{"get":{"tags":["Developers"],"summary":"All projects for a single developer","description":"Returns the full project portfolio for a developer with capacity totals by stage.","operationId":"developer_projects_developers__developer_id__projects_get","parameters":[{"name":"developer_id","in":"path","required":true,"schema":{"type":"string","title":"Developer Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Per Page"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"capacity_mw, queue_date_std, status_std","default":"capacity_mw","title":"Sort"},"description":"capacity_mw, queue_date_std, status_std"},{"name":"order","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"desc","title":"Order"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"developer_id":142,"developer":"NextEra Energy Resources","total_projects":412,"total_capacity_mw":38420.0,"by_stage":{"operational":188,"construction":24,"late":47,"mid":53,"early":91,"withdrawn":9},"projects":[{"id":"ERCOT-21INR0099","name":"Brazos Solar","state":"TX","capacity_mw":200.0,"stage":"construction"}],"meta":{"total":412,"page":1,"per_page":50}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events":{"get":{"tags":["Signals"],"summary":"Developer event tape — news entity-matched to canonical developers","description":"News events (GDELT, refreshed daily) entity-matched to the canonical developer registry and classified as financing, distress, litigation, ma, project, or mention. Headline input to the distress signal.\n\n**Common queries**\n- Distress events this month: `?event_type=distress&days=30`\n- High-confidence financing news: `?event_type=financing&min_confidence=0.9`\n- Everything on one developer: `?developer=Invenergy&days=90`","operationId":"list_events_events_get","parameters":[{"name":"developer","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Developer canonical name (exact) or substring","title":"Developer"},"description":"Developer canonical name (exact) or substring"},{"name":"event_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"financing, distress, litigation, ma, project, mention","title":"Event Type"},"description":"financing, distress, litigation, ma, project, mention"},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"Lookback window over published_at","default":30,"title":"Days"},"description":"Lookback window over published_at"},{"name":"min_confidence","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":1,"minimum":0},{"type":"null"}],"description":"Minimum match confidence (0.9 = name in headline)","title":"Min Confidence"},"description":"Minimum match confidence (0.9 = name in headline)"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":[{"developer_canonical":"Pine Gate Renewables","event_type":"distress","title":"Pine Gate Renewables files for Chapter 11 bankruptcy protection","url":"https://www.utilitydive.com/news/pine-gate-renewables-chapter-11/","domain":"utilitydive.com","published_at":"2026-06-09T14:30:00Z","source":"gdelt","matched_on":"title","match_confidence":0.9,"source_country":"United States"}],"meta":{"total":87,"page":1,"per_page":50}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events/summary":{"get":{"tags":["Signals"],"summary":"Event counts by type + most-covered developers","description":"Aggregate view of the event tape over a lookback window: counts by event type and the 25 developers with the most coverage, with per-type breakdowns. Use as the news component of a developer distress score.","operationId":"events_summary_events_summary_get","parameters":[{"name":"developer","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Developer canonical name (exact) or substring","title":"Developer"},"description":"Developer canonical name (exact) or substring"},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"total_events":1240,"days":30,"by_type":[{"event_type":"mention","count":850,"developers":312},{"event_type":"financing","count":180,"developers":95},{"event_type":"ma","count":110,"developers":60},{"event_type":"project","count":64,"developers":41},{"event_type":"litigation","count":22,"developers":15},{"event_type":"distress","count":14,"developers":8}],"top_developers":[{"developer_canonical":"NextEra Energy","events":96,"distress":0,"financing":12,"litigation":1,"latest_event":"2026-06-10T22:15:00Z"}]}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/developers/{developer_id}/events":{"get":{"tags":["Signals"],"summary":"Event tape for one developer","description":"All news events for a single developer (canonical name or numeric id), newest first. Pair with `/developers/{id}` portfolio metrics to read capital activity against queue behavior.","operationId":"developer_events_developers__developer_id__events_get","parameters":[{"name":"developer_id","in":"path","required":true,"schema":{"type":"string","title":"Developer Id"}},{"name":"event_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"financing, distress, litigation, ma, project, mention","title":"Event Type"},"description":"financing, distress, litigation, ma, project, mention"},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":90,"title":"Days"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"developer":"Invenergy","data":[{"event_type":"financing","title":"Invenergy closes $1.5B credit facility for renewable buildout","url":"https://www.reuters.com/business/energy/invenergy-credit-facility/","domain":"reuters.com","published_at":"2026-06-08T11:00:00Z","source":"gdelt","matched_on":"title","match_confidence":0.9,"source_country":"United States"}],"meta":{"total":14,"page":1,"per_page":50}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/capital-raises":{"get":{"tags":["Signals"],"summary":"SEC Form D exempt-offering filings — energy universe","description":"Form D / D-A filings (daily EDGAR + quarterly DERA backfill) filtered to the energy universe: issuers matched to canonical developers or queue projects, plus energy-keyword issuers (funds, small dev-cos). Amounts are structured SEC fields, not parsed prose. Includes related persons (officers/directors) — entity-resolution evidence for SPV-to-parent mapping.\n\n**Coverage note:** utility-scale developers raise via credit facilities/tax equity (no Form D) — press-coverage financing events live in `/events?event_type=financing`.\n\n**Common queries**\n- Matched developer raises: `?matched_only=true`\n- Raises above $10M since 2024: `?min_amount_sold=10000000&since=2024-01-01`\n- One developer: `?developer=Greenbacker`","operationId":"list_capital_raises_capital_raises_get","parameters":[{"name":"developer","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Matched developer canonical name (substring)","title":"Developer"},"description":"Matched developer canonical name (substring)"},{"name":"issuer","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Form D issuer name (substring)","title":"Issuer"},"description":"Form D issuer name (substring)"},{"name":"matched_only","in":"query","required":false,"schema":{"type":"boolean","description":"Only filings matched to a canonical developer or queue project","default":false,"title":"Matched Only"},"description":"Only filings matched to a canonical developer or queue project"},{"name":"min_amount_sold","in":"query","required":false,"schema":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"Minimum total_amount_sold in USD","title":"Min Amount Sold"},"description":"Minimum total_amount_sold in USD"},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Earliest filing date, YYYY-MM-DD","title":"Since"},"description":"Earliest filing date, YYYY-MM-DD"},{"name":"is_amendment","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"True = D/A amendments only, False = new filings only","title":"Is Amendment"},"description":"True = D/A amendments only, False = new filings only"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":[{"accession_number":"0001213900-25-040112","filing_date":"2025-05-16","is_amendment":1,"issuer_name":"Greenbacker Renewable Energy Co II LLC","cik":"1563922","entity_type":"Limited Liability Company","jurisdiction":"DELAWARE","issuer_city":"NEW YORK","issuer_state":"NY","year_of_inc":"2012","industry_group":"Other Energy","total_offering_amount":600000000.0,"total_amount_sold":471004584.0,"date_of_first_sale":"2014-04-25","is_equity":1,"is_debt":0,"related_persons":[{"name":"Charles Wheeler","relationships":["Executive Officer","Director"],"city":"New York","state":"NY"}],"energy_keyword":1,"developer_canonical":"Greenbacker Renewable Energy","project_name":null,"match_method":"developer_exact"}],"meta":{"total":896,"page":1,"per_page":50}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/capital/leaderboard":{"get":{"tags":["Signals"],"summary":"Capital raised vs MW deployed — distress lens","description":"Per-developer capital raised against operational capacity. `divergence` = capital per operational MW (high = raised a lot, built little). Sort by capital_raised, divergence, or distress. capital_raised is SEC Form D matched today and grows as 8-K / tax-equity / private sources land.\n\nDistress is share-normalized (v3) so it no longer rewards size — focus on the distressed developer segment with `?sort=distress&exclude_tiers=major_utility,major_ipp`.","operationId":"capital_leaderboard_capital_leaderboard_get","parameters":[{"name":"sort","in":"query","required":false,"schema":{"type":"string","description":"capital_raised | divergence | distress","default":"capital_raised","title":"Sort"},"description":"capital_raised | divergence | distress"},{"name":"min_raised","in":"query","required":false,"schema":{"type":"number","minimum":0,"description":"Minimum capital raised (USD)","default":0,"title":"Min Raised"},"description":"Minimum capital raised (USD)"},{"name":"tier","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated tiers to INCLUDE (e.g. independent,mid_platform,pe_fund)","title":"Tier"},"description":"Comma-separated tiers to INCLUDE (e.g. independent,mid_platform,pe_fund)"},{"name":"exclude_tiers","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated tiers to EXCLUDE (e.g. major_utility,major_ipp)","title":"Exclude Tiers"},"description":"Comma-separated tiers to EXCLUDE (e.g. major_utility,major_ipp)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":[{"developer":"Example Solar Partners","tier":"independent","capital_raised":325000000,"raise_count":1,"latest_raise":"2025-09-12","operational_capacity_mw":0.0,"active_capacity_mw":1200.0,"capital_per_operational_mw":null,"financing_events":1,"ma_events":0,"distress_events":0,"litigation_events":1,"withdrawal_rate":0.33,"active_projects":18,"behind_schedule":6,"high_ic_cost_projects":3,"max_ic_cost_per_kw":612.0,"distress_signal":{"level":"High","score":7,"components":{"capital_raised_low_deployment":true,"interconnection_cost_burden":{"high_cost_projects":3,"max_cost_per_kw":612.0},"behind_schedule":{"count":6,"share":0.333},"high_withdrawal_rate":0.33,"litigation":1}}}],"count":1,"sort":"distress"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/developers/{developer_id}/capital":{"get":{"tags":["Signals"],"summary":"One developer's capital profile + distress signal","description":"How much a developer has raised (what we can see), the filings, news-signal counts, MW deployed, and a transparent distress score.","operationId":"developer_capital_developers__developer_id__capital_get","parameters":[{"name":"developer_id","in":"path","required":true,"schema":{"type":"string","title":"Developer Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"developer":"Greenbacker Renewable Energy","tier":"mid_platform","capital_raised":471004584,"raise_count":2,"latest_raise":"2025-05-16","raises":[{"filing_date":"2025-05-16","issuer_name":"Greenbacker Renewable Energy Co II LLC","total_offering_amount":600000000,"total_amount_sold":471004584,"is_amendment":1,"match_method":"developer_exact"}],"operational_capacity_mw":320.5,"active_capacity_mw":880.0,"capital_per_operational_mw":1469773.0,"behind_schedule_projects":4,"cod_slipped_projects":1,"stuck_in_queue_projects":3,"high_ic_cost_projects":2,"max_ic_cost_per_kw":540.0,"signal_events":{"financing_events":3,"ma_events":1,"distress_events":0,"litigation_events":0},"distress_signal":{"level":"Elevated","score":3,"components":{"behind_schedule":{"count":4,"share":0.16},"interconnection_cost_burden":{"high_cost_projects":2,"max_cost_per_kw":540.0}}}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ma-events":{"get":{"tags":["Signals"],"summary":"M&A / ownership-change events — who's buying and selling assets","description":"Structured M&A signal (WOR-158/159). `ownership_change` = EIA-860 annual ownership diff (operating-asset sales); `queue_developer_change` = interconnection-queue developer field changes (pre-COD transfers). Counterparties resolved to canonical developers; same-parent renames filtered. Filter by `developer`, `event_type`, `region`, `min_confidence`, `matched_only`.","operationId":"list_ma_events_ma_events_get","parameters":[{"name":"event_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ownership_change | queue_developer_change","title":"Event Type"},"description":"ownership_change | queue_developer_change"},{"name":"developer","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Canonical developer on either side (buyer or seller)","title":"Developer"},"description":"Canonical developer on either side (buyer or seller)"},{"name":"region","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO/RTO region (queue events)","title":"Region"},"description":"ISO/RTO region (queue events)"},{"name":"technology","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Technology substring","title":"Technology"},"description":"Technology substring"},{"name":"min_confidence","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"high | medium | low — minimum confidence","title":"Min Confidence"},"description":"high | medium | low — minimum confidence"},{"name":"matched_only","in":"query","required":false,"schema":{"type":"boolean","description":"Only events where a side resolves to a canonical developer","default":false,"title":"Matched Only"},"description":"Only events where a side resolves to a canonical developer"},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Earliest effective_date, YYYY-MM-DD","title":"Since"},"description":"Earliest effective_date, YYYY-MM-DD"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":[{"event_type":"ownership_change","asset_class":"operating","effective_date":"2024-01-01","plant_id_eia":55168,"generator_id":"1","queue_id":null,"region":null,"asset_name":"Milford Power LP","capacity_mw":128.9,"technology":"Natural Gas","state":"CT","seller":"Starwood Energy Group","seller_canonical":"Starwood Energy Group","buyer":"Jera Energy America","buyer_canonical":"Jera Energy America","fraction_owned":1.0,"source":"eia_860_ownership","confidence":"high"},{"event_type":"queue_developer_change","asset_class":"queue_project","effective_date":"2026-02-15","plant_id_eia":null,"generator_id":null,"queue_id":"0584","region":"NYISO","asset_name":"Dog Corners Solar","capacity_mw":90.0,"technology":"Solar","state":null,"seller":"SunEast Dog Corners Solar LLC","seller_canonical":"SunEast","buyer":"Dog Corners Solar NY LLC","buyer_canonical":null,"fraction_owned":null,"source":"queue_snapshots","confidence":"medium"}],"meta":{"total":4573,"page":1,"per_page":50,"total_pages":92}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ma-events/summary":{"get":{"tags":["Signals"],"summary":"M&A event counts by type, confidence, and top acquirers","description":"Roll-up of structured M&A events: counts by event_type and confidence, plus the most-active acquirers by event count.","operationId":"ma_events_summary_ma_events_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"total":4573,"by_type":{"ownership_change":4440,"queue_developer_change":133},"by_confidence":{"high":1820,"medium":2491,"low":262},"top_acquirers":[{"developer":"NextEra Energy Resources","acquisitions":41},{"developer":"Brookfield Renewable","acquisitions":28}]}}}}}}},"/material-events":{"get":{"tags":["Signals"],"summary":"SEC 8-K material events — public-parent debt / equity / M&A / distress","description":"8-K filings in the energy universe (WOR-160) — the capital + distress events that never file Form D. Categories: debt (Item 2.03), equity (3.02), M&A (2.01), agreement (1.01), distress (bankruptcy 1.03, impairment 2.06, delisting 3.01). Filter by `event_type` (financing/ma/distress), `category`, `developer`, `matched_only`.","operationId":"list_material_events_material_events_get","parameters":[{"name":"event_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"financing | ma | distress","title":"Event Type"},"description":"financing | ma | distress"},{"name":"developer","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Matched developer canonical (substring)","title":"Developer"},"description":"Matched developer canonical (substring)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"distress | ma | debt | equity | agreement","title":"Category"},"description":"distress | ma | debt | equity | agreement"},{"name":"matched_only","in":"query","required":false,"schema":{"type":"boolean","description":"Only filings matched to a canonical developer","default":false,"title":"Matched Only"},"description":"Only filings matched to a canonical developer"},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Earliest filing date, YYYY-MM-DD","title":"Since"},"description":"Earliest filing date, YYYY-MM-DD"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":[{"accession_number":"0000072903-26-000045","filing_date":"2026-06-10","form_type":"8-K","issuer_name":"NORTHERN STATES POWER CO /WI/","cik":"72903","items":["Entry into a Material Definitive Agreement","Creation of a Direct Financial Obligation","Financial Statements and Exhibits"],"categories":["agreement","debt"],"event_type":"financing","url":"https://www.sec.gov/Archives/edgar/data/72903/000007290326000045/0000072903-26-000045-index.htm","energy_keyword":1,"developer_canonical":"Xcel Energy","match_method":"developer_exact"}],"meta":{"total":312,"page":1,"per_page":50,"total_pages":7}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tax-credits/calculate":{"get":{"tags":["Tax Credits"],"summary":"ITC/PTC calculator with all IRA bonuses","operationId":"calculate_tax_credits_tax_credits_calculate_get","parameters":[{"name":"technology","in":"query","required":true,"schema":{"type":"string","description":"Technology type (Solar, Wind, Storage, etc.)","title":"Technology"},"description":"Technology type (Solar, Wind, Storage, etc.)"},{"name":"capacity_mw","in":"query","required":true,"schema":{"type":"number","description":"Capacity in MW","title":"Capacity Mw"},"description":"Capacity in MW"},{"name":"state","in":"query","required":true,"schema":{"type":"string","description":"State abbreviation (e.g., TX)","title":"State"},"description":"State abbreviation (e.g., TX)"},{"name":"county","in":"query","required":false,"schema":{"type":"string","description":"County name","default":"","title":"County"},"description":"County name"},{"name":"cod_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Expected COD year","title":"Cod Year"},"description":"Expected COD year"},{"name":"domestic_content","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Meets domestic content requirements?","title":"Domestic Content"},"description":"Meets domestic content requirements?"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"technology":"Solar","capacity_mw":2.0,"state":"NJ","cod":"2026-12-31","base_credit_pct":0.3,"bonuses":{"energy_community":{"eligible":true,"bonus_pct":0.1},"domestic_content":{"eligible":true,"bonus_pct":0.1},"low_income":{"eligible":false,"bonus_pct":0.0}},"effective_credit_pct":0.5,"eligible_basis_usd":5800000,"estimated_itc_value_usd":2900000,"ptc_comparison_usd_per_year":56000,"recommended_credit":"ITC"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Computes the base credit plus stackable IRA bonuses (energy community +10%, domestic content +10%, low-income +10-20%). Pass any combination of `technology`, `capacity_mw`, `state`, `cod`, and the bonus flags.\n\n**Example**\n`/tax-credits/calculate?technology=Solar&capacity_mw=2&state=NJ&energy_community=true`"}},"/pipeline/status":{"get":{"tags":["System"],"summary":"Pipeline health and per-source freshness","operationId":"pipeline_status_pipeline_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"total_sources":65,"healthy":58,"stale":5,"error":2,"sources":[{"name":"ercot","status":"healthy","last_success":"2026-06-06T11:00:00Z","row_count":1924}]}}}}},"description":"65 sources monitored. Returns success/error status, last run, and staleness flag per source."}},"/pipeline/scorecard/{source}":{"get":{"tags":["System"],"summary":"Score a source against the ten done-criteria, against production","description":"`tools/source_scorecard.py` reads through the database adapter, so a CLI run without `DATABASE_URL` returns 2 passed and 8 not-checked — every \"passes N of 10\" ever quoted came from a run like that. This endpoint runs inside the API process, where the database is.\n\n**There is no score, deliberately.** A criterion that could not be evaluated is not a fraction of one that failed, so `counts` is for display and is labelled as such. The machine-readable answer is `exit_code`: `0` every criterion passed, `1` at least one FAILED (checked, and the answer is no), `2` nothing failed but something was NOT-CHECKED.\n\n`checked: false` means the scorecard could not be run at all — distinct from an empty criteria list, which would read as 'nothing failed'.","operationId":"pipeline_scorecard_pipeline_scorecard__source__get","parameters":[{"name":"source","in":"path","required":true,"schema":{"type":"string","title":"Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"checked":true,"source":"pjm_cycle","criteria":[{"n":1,"name":"Registered","verdict":"not-checked","reason":"no `source` table exists in this repo"},{"n":4,"name":"Fixtured","verdict":"pass","evidence":{"documents":4,"re_parsed_and_matched":4}},{"n":9,"name":"Bitemporal","verdict":"pass","evidence":{"table":"field_claims","source":"pjm_cycle_report","claims":762,"with_valid_from":762}}],"counts":{"passed":7,"failed":1,"not_checked":2},"exit_code":1,"note":"counts are NOT a score and must not be summed into one — a criterion that could not be evaluated is not a fraction of one that failed (CLAUDE.md §4.4)"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/pipeline/scorecard":{"get":{"tags":["System"],"summary":"Sources the done-criteria scorecard knows about","description":"One today, which is itself the finding — the scorecard was built to gate seven ISOs and has one subject.","operationId":"pipeline_scorecard_index_pipeline_scorecard_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"checked":true,"sources":["pjm_cycle"],"scored_of_registered":{"scored":1,"note":"one subject so far"}}}}}}}},"/pipeline/job-runs":{"get":{"tags":["System"],"summary":"What actually ran, and how it went","description":"The read side of the `job_runs` ledger. `/pipeline/dashboard` reports `next_run`, which is a statement about the SCHEDULE — a lane whose scheduler thread has died still shows a valid one, and a drained lane looks identical to a broken one.\n\nThree outcomes, deliberately kept apart: `checked: false` means the ledger could not be read and says nothing about whether jobs ran; `last_outcome: \"never_recorded\"` means it was read and this job has no rows; `\"failed\"` means it ran and failed. `outcome` is tri-state — `ok` / `failed` / `unknown` — because a job returning a non-dict leaves the listener unable to determine the result, and that is not the same as a failure.\n\nPass `?job_id=<id>&limit=N` for one job's recent history, newest first.","operationId":"pipeline_job_runs_pipeline_job_runs_get","parameters":[{"name":"job_id","in":"query","required":false,"schema":{"type":"string","title":"Job Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"checked":true,"kept_per_job":500,"jobs":{"pjm_document_fetch":{"last_run":"2026-08-21T17:45:00.412331+00:00","age_seconds":664.2,"last_success":"2026-08-21T17:45:00.412331+00:00","runs_recorded":96,"failures_recorded":0,"unknown_recorded":0,"outcome":"ok","elapsed_s":0.4,"summary":{"fetched":0,"idle_reason":"corpus_complete"},"error":null},"enrichment":{"last_run":"2026-08-21T12:24:40.162845+00:00","age_seconds":19844.5,"last_success":"2026-08-21T12:24:40.162845+00:00","runs_recorded":12,"failures_recorded":0,"unknown_recorded":0,"outcome":"ok","elapsed_s":612.7,"summary":{"failed_steps":["eia_plant_match"]},"error":null}}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/pipeline/dashboard":{"get":{"tags":["System"],"summary":"Pipeline ops dashboard","description":"Success rate by pipeline, recent errors, circuit-breaker state, and scheduler health.","operationId":"pipeline_dashboard_pipeline_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"success_rate_7d":0.97,"recent_errors":[{"pipeline":"pjm_direct","error":"selenium timeout","ts":"2026-06-05T03:14:00Z"}],"circuit_breakers":{"pjm_direct":"open","nyiso_direct":"open"},"scheduler_jobs":14}}}}}}},"/monitoring":{"get":{"tags":["System"],"summary":"Visual monitoring dashboard (HTML)","description":"HTML page showing pipeline health, source freshness, and DB sizes. Browser-friendly.","operationId":"monitoring_dashboard_monitoring_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"},"example":"<html><body>...monitoring dashboard...</body></html>"}}}}}},"/coverage":{"get":{"tags":["System"],"summary":"Field-level coverage and pipeline freshness per ISO","description":"The JSON behind the /dashboard page. Per-region row counts, per-field-group population rates, pipeline freshness, and backfill progress.\n\nUse it to answer *how complete is this dataset* before relying on a field in a screen. ","operationId":"coverage_coverage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"generated_at":"2026-08-11T03:03:16.438805Z","regions":[{"region":"CAISO","total":10397,"sources":{"sdge_dg":86,"interconnection_fyi":6984,"lbl":2512,"caiso":325},"fields":{"name":100,"developer":12,"capacity_mw":100,"type":88}}],"field_groups":[{"group":"Identity","fields":["name"]}],"freshness":[],"backfill":{"dpp_reports":null,"dpp_reports_target":88,"dpp_processed":null,"dpp_projects_with_cost":null},"jobs":[{"id":"ferc_comprehensive_backfill_cron","next_run":"2026-08-11T03:06:58.176447+00:00"}]}}}}}}},"/api-keys/register":{"post":{"tags":["Auth"],"summary":"Self-serve API key registration","description":"Returns a free-tier API key. One key per email. Plans are published at /plans and deliberately not restated here.","operationId":"register_api_key_api_keys_register_post","parameters":[{"name":"name","in":"query","required":true,"schema":{"type":"string","description":"Your name or company","title":"Name"},"description":"Your name or company"},{"name":"email","in":"query","required":true,"schema":{"type":"string","description":"Email address","title":"Email"},"description":"Email address"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"api_key":"pk_R1jl5gD...","tier":"free","limits":{"queries_per_month":100,"rows_per_month":250,"max_page":3,"export":false},"usage":"Include in requests as X-API-Key header","docs":"https://api.prospectorlabs.io/docs","get_started":"https://api.prospectorlabs.io/start","upgrade":"Plans: Free · Access — Talk to us · Enterprise — Talk to us. See /plans.","message":"Save this key now — it's also emailed to you. Corpus-level aggregates stay keyless; this key is what unlocks per-project rows and raises the limits."}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/me":{"get":{"tags":["Auth"],"summary":"Current API key info, tier, and usage","description":"Returns the authenticated user's account info, tier limits, and 30-day usage breakdown by endpoint. The Glass /settings dashboard reads from here.","operationId":"get_my_account_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"key_prefix":"pk_R1jl5gD","name":"Owen Coonahan","email":"owen@prospectorlabs.com","tier":"free","plan":"Free","limits":{"monthly_queries":100,"rate_limit":"10/minute","export":false,"enforced":{"export":true,"monthly_queries":true,"rate_limit":false,"row_budget":true,"page_depth":true}},"usage":{"this_month":41,"monthly_limit":100,"remaining":59,"total_requests":284,"last_30_days":41,"by_endpoint":[{"endpoint":"/projects","count":184,"avg_ms":142.0},{"endpoint":"/deals/itc","count":96,"avg_ms":89.0}]}}}}}}}},"/catalog/data":{"get":{"tags":["System"],"summary":"Coverage per market by provenance class","description":"Three classes, because two was ambiguous enough to produce two different 'correct' totals from the same data: `iso_direct` (we fetched it from the ISO/RTO), `state_direct` (we fetched it from a state program), `aggregated` (present only via LBNL's annual file or a competitor's product). iso_direct + state_direct + aggregated == total, per region and overall, asserted server-side.","operationId":"catalog_data_catalog_data_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"totals":{"total":47969,"iso_direct":24039,"state_direct":1815,"aggregated":22115,"first_party":25854,"aggregated_pct":46},"regions":[{"region":"PJM","total":10267,"iso_direct":9309,"state_direct":925,"aggregated":33,"first_party_pct":100,"last_refresh":"2026-08-13 11:18:23","cadence":"daily"},{"region":"CAISO","total":10397,"iso_direct":2278,"state_direct":576,"aggregated":7543,"first_party_pct":27,"last_refresh":"2026-08-13 11:19:27","cadence":"daily"}],"invariant_holds":true}}}}}}},"/catalog":{"get":{"tags":["System"],"summary":"Coverage catalog by market and provenance (HTML)","description":"What we hold in each market and where every row came from, computed live. Publishes the weak markets as well as the strong ones.","operationId":"catalog_page_catalog_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"},"example":"<!DOCTYPE html> … coverage catalog"}}}}}},"/plans":{"get":{"tags":["System"],"summary":"Canonical plans, and which limits are actually enforced","description":"The single source every surface reads for pricing and limits. `enforced` says which limits this server actually applies — a limit listed but not enforced is not a promise we are keeping, and saying so here is cheaper than being caught by a security review.","operationId":"get_plans_plans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"currency":"USD","plans":[{"id":"free","name":"Free","tagline":"A glimpse.","price_display":"Free","export":false,"monthly_queries":100,"rate_limit":"10/minute"},{"id":"access","name":"Access","tagline":"One analyst or one team.","price_display":"Talk to us","export":true,"monthly_queries":null,"rate_limit":"60/minute"},{"id":"enterprise","name":"Enterprise","tagline":"Bulk delivery, warehouse share, SLA, and redistribution of first-party sourced records only.","price_display":"Talk to us","export":true,"monthly_queries":null,"rate_limit":"300/minute"}],"enforced":{"export":true,"monthly_queries":true,"rate_limit":false,"row_budget":true,"page_depth":true},"contact":"owen@prospectorlabs.io"}}}}}}},"/me/keys":{"get":{"tags":["Auth"],"summary":"List the keys you own","description":"Owner-scoped by the email on the calling key. Returns prefixes and metadata only — never a full key and never a hash. A key with no email sees only itself, because an empty email is not an identity.","operationId":"list_my_keys_me_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"count":1,"keys":[{"key_prefix":"pk_R1jl5gD","name":"Acme Research","tier":"free","created_at":"2026-08-12T14:02:35","last_used_at":"2026-08-14T03:02:11","request_count":214,"active":true,"current":true}]}}}}}}},"/me/keys/revoke":{"post":{"tags":["Auth"],"summary":"Revoke one of your own keys","description":"Takes effect on the next request, not at the next quota reset. You may revoke the key you are calling with — that is the leaked-key case, so it is allowed and flagged rather than blocked. Revoking also unblocks rotation: /api-keys/register will then issue a replacement for the same email.","operationId":"revoke_my_key_me_keys_revoke_post","parameters":[{"name":"key_prefix","in":"query","required":true,"schema":{"type":"string","description":"Prefix of the key to revoke, from /me/keys","title":"Key Prefix"},"description":"Prefix of the key to revoke, from /me/keys"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"revoked":"pk_R1jl5gD","revoked_current_key":true,"message":"This key is now revoked and the key you just used is the one you revoked. Register a replacement at /register with the same email."}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/billing/checkout":{"post":{"tags":["Billing"],"summary":"Start a Stripe Checkout session for a subscription","description":"Returns a Stripe Checkout URL for the requested tier ('pro' or 'team'). Redirect the user to the URL to complete payment. Use /billing/portal afterward to manage the subscription.","operationId":"billing_checkout_billing_checkout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"url":"https://checkout.stripe.com/c/pay/cs_live_a1abc..."}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/billing/portal":{"post":{"tags":["Billing"],"summary":"Stripe Customer Portal URL for managing a subscription","description":"Returns a Stripe-hosted portal URL where the customer can change plan, update payment method, or cancel. Identified by email.","operationId":"billing_portal_billing_portal_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortalRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"url":"https://billing.stripe.com/p/session/test_xyz..."}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/billing/status":{"get":{"tags":["Billing"],"summary":"Current subscription state for the authenticated key","description":"Returns the Stripe subscription tier, status, current_period_end, and customer ID for the authenticated key's email. Used by Glass /settings to show tier badges.","operationId":"billing_status_billing_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"email":"owen@prospectorlabs.io","tier":"access","subscription_status":"active","current_period_end":"2026-07-08T00:00:00Z","stripe_customer_id":"cus_QXyz123","stripe_subscription_id":"sub_1QXyz..."}}}}}}},"/stripe/webhook":{"post":{"tags":["Billing"],"summary":"Stripe webhook receiver (subscription lifecycle events)","description":"Stripe-side webhook endpoint. Verifies signature via STRIPE_WEBHOOK_SECRET, handles customer.subscription.* events, and syncs the tier into the api_keys table.","operationId":"stripe_webhook_stripe_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"received":true,"event_type":"customer.subscription.updated","action":"tier_synced","tier":"access"}}}}}}},"/register":{"get":{"tags":["Auth"],"summary":"Self-serve registration page (HTML)","description":"Returns the HTML signup form. POSTs to /api-keys/register on submit.","operationId":"register_page_register_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"},"example":"<html>...registration form...</html>"}}}}}},"/account":{"get":{"tags":["Auth"],"summary":"Self-serve account page (HTML)","description":"Where /register sends people after issuing a key. Authenticated by the API key itself — an API customer has no separate account to sign in to. Shows plan, usage against quota, the caller's keys, and revoke.","operationId":"account_page_account_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"},"example":"<!DOCTYPE html> … account page"}}}}}},"/admin/trigger/{job_name}":{"post":{"tags":["Admin"],"summary":"Manually trigger a scheduled job (admin)","description":"Fires a scheduler job by name (e.g. `refresh_ercot`, `refresh_pjm`).","operationId":"admin_trigger_admin_trigger__job_name__post","parameters":[{"name":"job_name","in":"path","required":true,"schema":{"type":"string","title":"Job Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"job":"refresh_ercot","status":"triggered","scheduled_at":"2026-06-06T14:00:00Z"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/generators":{"get":{"tags":["Reference"],"summary":"EIA generator inventory","description":"26K+ operating generators from EIA Form 860/861.","operationId":"list_generators_generators_get","parameters":[{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},{"name":"fuel_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fuel Type"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"min_capacity","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Capacity"}},{"name":"region","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":[{"plant_id":56012,"generator_id":"1","state":"TX","technology":"Onshore Wind Turbine","nameplate_mw":200.0,"operating_year":2018,"owner":"NextEra Energy Resources"}],"meta":{"total":26412,"page":1,"per_page":50}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/eia/owners":{"get":{"tags":["Reference"],"summary":"EIA-860 generator ownership records","description":"Per-generator ownership with percent owned and the owner's mailing address. Multiple rows per generator when a plant is jointly owned. ","operationId":"eia_owners_eia_owners_get","parameters":[{"name":"plant_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"EIA plant code","title":"Plant Code"},"description":"EIA plant code"},{"name":"owner","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Owner name (partial match)","title":"Owner"},"description":"Owner name (partial match)"},{"name":"owner_state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner State"}},{"name":"joint_only","in":"query","required":false,"schema":{"type":"boolean","description":"Only generators with >1 owner","default":false,"title":"Joint Only"},"description":"Only generators with >1 owner"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":[{"plant_code":"10","generator_id":"1","ownership_id":"195","owner_name":"Alabama Power Co","owner_street":"600 North 18th Street","owner_city":"Birmingham","owner_state":"AL","owner_zip":"35291"}],"meta":{"total":5668,"page":1,"per_page":50,"total_pages":114}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/eia/storage":{"get":{"tags":["Reference"],"summary":"EIA-860 battery and storage generators","description":"Storage generators from EIA-860 with energy capacity (MWh) alongside power ratings (max charge/discharge MW) — the pair you need to derive duration. ","operationId":"eia_storage_eia_storage_get","parameters":[{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},{"name":"gen_class","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"operable or proposed","title":"Gen Class"},"description":"operable or proposed"},{"name":"min_mwh","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum energy capacity (MWh)","title":"Min Mwh"},"description":"Minimum energy capacity (MWh)"},{"name":"min_duration","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum duration (hours)","title":"Min Duration"},"description":"Minimum duration (hours)"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":[{"plant_code":"68342","generator_id":"HOHI2","gen_class":"proposed","utility_id":"66737","utility_name":"HOHI bn, LLC","plant_name":"Hop Hill Solar Generation and BESS","state":"WA","county":"Benton"}],"meta":{"total":1535,"page":1,"per_page":50,"total_pages":31}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/eia/plant/{plant_code}":{"get":{"tags":["Reference"],"summary":"Full EIA profile for one plant","description":"Everything EIA-860 holds for a single plant code: the plant record, its owners, and its storage, wind, solar, multifuel and pipeline generator rows. ","operationId":"eia_plant_eia_plant__plant_code__get","parameters":[{"name":"plant_code","in":"path","required":true,"schema":{"type":"string","title":"Plant Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"plant":{"plant_code":"10","plant_name":"Greene County","utility_id":"195","utility_name":"Alabama Power Co","street_address":"Highway 43","city":"Demopolis"},"owners":[{"plant_code":"10","generator_id":"1","ownership_id":"195","owner_name":"Alabama Power Co","owner_street":"600 North 18th Street","owner_city":"Birmingham"}],"storage":[],"wind":[],"solar":[],"multifuel":[{"utility_id":"195","utility_name":"Alabama Power Co","plant_code":"10","plant_name":"Greene County","state":"AL","county":"Greene"}],"pipeline":[]}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/eia/wind":{"get":{"tags":["Reference"],"summary":"EIA-860 wind generators","description":"Utility-scale wind generators from EIA-860, including turbine count, hub height, and nameplate/summer/winter capacity. ","operationId":"eia_wind_eia_wind_get","parameters":[{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},{"name":"min_capacity","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Capacity"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":[{"utility_id":"63720","utility_name":"Ocean Wind, LLC","plant_code":"64082","plant_name":"Ocean Wind","state":"NJ","county":null,"generator_id":"OCW01","status":"IP"}],"meta":{"total":1748,"page":1,"per_page":50,"total_pages":35}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/eia/solar":{"get":{"tags":["Reference"],"summary":"EIA-860 solar generators","description":"Utility-scale solar generators from EIA-860, including panel technology (fixed tilt, single/dual-axis tracking, bifacial) and nameplate/summer/winter capacity. ","operationId":"eia_solar_eia_solar_get","parameters":[{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},{"name":"min_capacity","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Capacity"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":[{"utility_id":"63467","utility_name":"Naturgy Candela DevCo LLC","plant_code":"65895","plant_name":"Chill Sun Solar Project","state":"NV","county":"Nye","generator_id":"CS1","status":"CN"}],"meta":{"total":8380,"page":1,"per_page":50,"total_pages":168}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/eia/generators-pipeline":{"get":{"tags":["Reference"],"summary":"EIA-860 proposed and under-construction generators","description":"The EIA-860 development pipeline — generators not yet operating, with planned online dates. Cross-reference against interconnection queue rows to confirm a project is real. ","operationId":"eia_generators_pipeline_eia_generators_pipeline_get","parameters":[{"name":"gen_class","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"proposed or retired","title":"Gen Class"},"description":"proposed or retired"},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},{"name":"technology","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Technology (partial match)","title":"Technology"},"description":"Technology (partial match)"},{"name":"min_capacity","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Capacity"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":[{"utility_id":"5248","utility_name":"Dominion Energy Inc.","plant_code":"64550","plant_name":"Coastal Virginia Offshore Wind (CVOW) Commercial Project","state":"VA","county":null,"generator_id":"CVOWC","technology":"Offshore Wind Turbine"}],"meta":{"total":8338,"page":1,"per_page":50,"total_pages":167}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/eia/utility/{utility_id}":{"get":{"tags":["Reference"],"summary":"EIA utility record","description":"The EIA-861 utility record for one utility ID — name, address, and service characteristics. ","operationId":"eia_utility_eia_utility__utility_id__get","parameters":[{"name":"utility_id","in":"path","required":true,"schema":{"type":"string","title":"Utility Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"utility":{"utility_id":"195","utility_name":"Alabama Power Co","street_address":"600 North 18th Street","city":"Birmingham","state":"AL","zip":"35291","owner_flag":"Y","operator_flag":null,"asset_manager_flag":null,"other_relationship_flag":null,"entity_type":"I","row_hash":"0fcae0dc24b1"}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/rto-generation":{"get":{"tags":["Reference"],"summary":"RTO-level generation by fuel type","description":"Hourly or daily generation totals by RTO and fuel category.","operationId":"rto_generation_rto_generation_get","parameters":[{"name":"rto","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by RTO (PJM, MISO, ERCOT, etc.)","title":"Rto"},"description":"Filter by RTO (PJM, MISO, ERCOT, etc.)"},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"Number of days of data","default":30,"title":"Days"},"description":"Number of days of data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"iso":"ERCOT","date":"2026-06-03","generation_mwh":{"solar":142000,"wind":219000,"gas":412000,"coal":18000,"nuclear":96000}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/plants":{"get":{"tags":["Reference"],"summary":"EIA plant-level data","description":"Plant inventory with state, technology mix, and net generation.","operationId":"list_plants_plants_get","parameters":[{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},{"name":"min_capacity","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Capacity"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":[{"plant_id":56012,"name":"Roscoe Wind","state":"TX","primary_fuel":"WND","net_gen_mwh_2024":2120000}],"meta":{"total":11840,"page":1,"per_page":50}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/fuel-prices":{"get":{"tags":["Market"],"summary":"Fuel prices by state and fuel type","description":"Henry Hub natural gas, coal, and distillate by state. Sourced from EIA.","operationId":"fuel_prices_fuel_prices_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"state":"TX","fuel":"natural_gas","date":"2026-05-31","price_usd_mmbtu":3.42}}}}}}},"/technology-costs":{"get":{"tags":["Market"],"summary":"NREL ATB cost projections","description":"Capital cost, fixed O&M, and capacity factor projections from NREL's Annual Technology Baseline.","operationId":"technology_costs_technology_costs_get","parameters":[{"name":"technology","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by technology — accepts aliases (Solar, Wind, Battery) or exact ATB names (UtilityPV, LandbasedWind)","title":"Technology"},"description":"Filter by technology — accepts aliases (Solar, Wind, Battery) or exact ATB names (UtilityPV, LandbasedWind)"},{"name":"parameter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by metric (CAPEX, LCOE, CF, Fixed O&M)","title":"Parameter"},"description":"Filter by metric (CAPEX, LCOE, CF, Fixed O&M)"},{"name":"scenario","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Scenario: Moderate, Conservative, Advanced","default":"Moderate","title":"Scenario"},"description":"Scenario: Moderate, Conservative, Advanced"},{"name":"year","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by projection year (e.g., 2030)","title":"Year"},"description":"Filter by projection year (e.g., 2030)"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"technology":"utility_scale_solar","year":2026,"scenario":"moderate","capex_usd_kw":1180,"fixed_om_usd_kw_yr":17.5,"capacity_factor":0.27,"lcoe_usd_mwh":31.2}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/lmp/daily":{"get":{"tags":["Market"],"summary":"Daily locational marginal prices by zone","description":"Daily LMP averages by pricing zone across PJM, MISO, ERCOT, CAISO, NYISO, ISO-NE, SPP. Use for site-specific basis analysis or zone-vs-hub spreads.","operationId":"lmp_daily_lmp_daily_get","parameters":[{"name":"iso","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by ISO (PJM, CAISO, ERCOT, etc.)","title":"Iso"},"description":"Filter by ISO (PJM, CAISO, ERCOT, etc.)"},{"name":"location","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by pricing location/zone","title":"Location"},"description":"Filter by pricing location/zone"},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"Number of days of data","default":30,"title":"Days"},"description":"Number of days of data"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"iso":"ERCOT","zone":"ERCOT_HOUSTON","date":"2026-06-03","lmp_avg_usd_mwh":38.42,"lmp_min_usd_mwh":18.1,"lmp_max_usd_mwh":142.55,"samples":288}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/lmp/monthly":{"get":{"tags":["Market"],"summary":"Monthly LMP averages and percentiles","description":"Monthly aggregates for trend analysis. Includes p10, median, p90, and standard deviation per zone.","operationId":"lmp_monthly_lmp_monthly_get","parameters":[{"name":"iso","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by ISO","title":"Iso"},"description":"Filter by ISO"},{"name":"location","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by location","title":"Location"},"description":"Filter by location"},{"name":"year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by year","title":"Year"},"description":"Filter by year"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"iso":"ERCOT","zone":"ERCOT_HOUSTON","month":"2026-05","lmp_avg_usd_mwh":42.18,"p10":21.5,"p50":38.7,"p90":78.3,"stdev":24.1}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/lmp/zones":{"get":{"tags":["Market"],"summary":"Available LMP pricing zones","description":"Reference list of all LMP zones across the supported ISOs.","operationId":"lmp_zones_lmp_zones_get","parameters":[{"name":"iso","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by ISO","title":"Iso"},"description":"Filter by ISO"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"zones":[{"iso":"ERCOT","zone":"ERCOT_HOUSTON"},{"iso":"PJM","zone":"PJM_AECO"},{"iso":"CAISO","zone":"TH_NP15_GEN-APND"}],"total":348}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/capacity/prices":{"get":{"tags":["Market"],"summary":"Capacity market auction prices","description":"Cleared capacity prices by ISO, zone, and delivery year. Covers PJM RPM, NYISO ICAP, ISO-NE FCM, MISO PRA.","operationId":"capacity_prices_capacity_prices_get","parameters":[{"name":"iso","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by ISO (PJM, NYISO, ISO-NE, MISO, CAISO)","title":"Iso"},"description":"Filter by ISO (PJM, NYISO, ISO-NE, MISO, CAISO)"},{"name":"delivery_year","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by delivery year (e.g., 2025/2026)","title":"Delivery Year"},"description":"Filter by delivery year (e.g., 2025/2026)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"iso":"PJM","zone":"RTO","delivery_year":"2025-2026","auction_type":"BRA","clearing_price_usd_mw_day":269.92,"cleared_mw":134000.0}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/capacity/zones":{"get":{"tags":["Market"],"summary":"Capacity market zones reference","description":"Reference list of capacity zones across ISOs.","operationId":"capacity_zones_capacity_zones_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"zones":[{"iso":"PJM","zone":"RTO"},{"iso":"PJM","zone":"MAAC"}],"total":28}}}}}}},"/capacity/elcc":{"get":{"tags":["Market"],"summary":"ELCC values by technology and zone","description":"Effective Load Carrying Capability ratings — the capacity-credit haircut applied to wind, solar, and storage.","operationId":"elcc_values_capacity_elcc_get","parameters":[{"name":"iso","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by ISO","title":"Iso"},"description":"Filter by ISO"},{"name":"technology","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by technology (Solar, Wind, Storage_4hr, etc.)","title":"Technology"},"description":"Filter by technology (Solar, Wind, Storage_4hr, etc.)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"iso":"PJM","delivery_year":"2025-2026","technology":"Solar","elcc_pct":0.13,"method":"marginal"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/technology-costs/summary":{"get":{"tags":["Market"],"summary":"Tech cost summary across scenarios","description":"Roll-up of ATB by technology with low/mid/high scenarios.","operationId":"technology_costs_summary_technology_costs_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"technology":"battery_storage_4hr","scenarios":{"advanced":{"capex_usd_kw":980,"lcoe_usd_mwh":65},"moderate":{"capex_usd_kw":1180,"lcoe_usd_mwh":82},"conservative":{"capex_usd_kw":1410,"lcoe_usd_mwh":102}}}}}}}}},"/deals/itc":{"get":{"tags":["Deals"],"summary":"Search ITC-eligible investment opportunities","description":"Pre-scored, pre-screened ITC deals. The primary endpoint for investor-facing workflows. Filter by state, technology, deal size, ITC rate, developer tier, and deal score.\n\n**Common queries**\n- High-rate small deals: `?min_rate=0.50&max_size_mw=20`\n- Energy-community solar in NJ: `?state=NJ&technology=Solar&energy_community=true`\n- Late-stage only: `?stage=late,construction&sort=score&order=desc`","operationId":"search_itc_deals_deals_itc_get","parameters":[{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"State filter (comma-separated: NY,NJ,PA)","title":"State"},"description":"State filter (comma-separated: NY,NJ,PA)"},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Technology filter (comma-separated: Solar,Storage)","title":"Type"},"description":"Technology filter (comma-separated: Solar,Storage)"},{"name":"max_mw","in":"query","required":false,"schema":{"type":"number","description":"Maximum capacity in MW","default":5.0,"title":"Max Mw"},"description":"Maximum capacity in MW"},{"name":"min_mw","in":"query","required":false,"schema":{"type":"number","description":"Minimum capacity in MW","default":0.0,"title":"Min Mw"},"description":"Minimum capacity in MW"},{"name":"min_rate","in":"query","required":false,"schema":{"type":"number","description":"Minimum ITC rate (e.g., 0.40 for 40%)","default":0.0,"title":"Min Rate"},"description":"Minimum ITC rate (e.g., 0.40 for 40%)"},{"name":"ec_only","in":"query","required":false,"schema":{"type":"boolean","description":"Energy community projects only","default":false,"title":"Ec Only"},"description":"Energy community projects only"},{"name":"li_only","in":"query","required":false,"schema":{"type":"boolean","description":"Low-income community projects only","default":false,"title":"Li Only"},"description":"Low-income community projects only"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Results per page","default":50,"title":"Per Page"},"description":"Results per page"},{"name":"source_db","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by source: 'master' or 'dg'","title":"Source Db"},"description":"Filter by source: 'master' or 'dg'"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":[{"queue_id":"PJM-AE2-123","name":"Brookside Solar","developer":"NextEra Energy Resources","state":"NJ","technology":"Solar","capacity_mw":2.0,"stage":"late","cod":"2026-12-31","itc_rate":0.5,"energy_community":true,"domestic_content":true,"deal_size_usd":2900000,"deal_score":84,"deal_grade":"A-","url":"/deals/PJM-AE2-123/sheet"}],"meta":{"total":1247,"page":1,"per_page":50}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/deals/itc/summary":{"get":{"tags":["Deals"],"summary":"Aggregate ITC deal pipeline statistics","description":"Top-line view of the available ITC deal universe. Cached 5 minutes.","operationId":"itc_deal_summary_deals_itc_summary_get","parameters":[{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"State filter","title":"State"},"description":"State filter"},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Technology filter","title":"Type"},"description":"Technology filter"},{"name":"max_mw","in":"query","required":false,"schema":{"type":"number","description":"Maximum capacity","default":5.0,"title":"Max Mw"},"description":"Maximum capacity"},{"name":"ec_only","in":"query","required":false,"schema":{"type":"boolean","description":"Energy community only","default":false,"title":"Ec Only"},"description":"Energy community only"},{"name":"li_only","in":"query","required":false,"schema":{"type":"boolean","description":"Low-income only","default":false,"title":"Li Only"},"description":"Low-income only"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"total_deals":1247,"total_deal_size_usd":4280000000,"by_state":[{"state":"TX","deal_count":198,"total_size_usd":740000000},{"state":"NJ","deal_count":142,"total_size_usd":410000000},{"state":"MA","deal_count":89,"total_size_usd":195000000}],"by_technology":[{"technology":"Solar","deal_count":612,"total_size_usd":1950000000},{"technology":"Storage","deal_count":281,"total_size_usd":920000000}],"by_itc_rate":[{"rate_pct":30,"deal_count":412},{"rate_pct":40,"deal_count":528},{"rate_pct":50,"deal_count":307}]}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/deals/itc/{queue_id}":{"get":{"tags":["Deals"],"summary":"Detailed ITC deal profile with scoring","description":"Full deal sheet payload in JSON. Use `/deals/{id}/sheet` for the HTML render.","operationId":"itc_deal_detail_deals_itc__queue_id__get","parameters":[{"name":"queue_id","in":"path","required":true,"schema":{"type":"string","title":"Queue Id"}},{"name":"region","in":"query","required":false,"schema":{"type":"string","title":"Region"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"queue_id":"PJM-AE2-123","name":"Brookside Solar","developer":"NextEra Energy Resources","state":"NJ","county":"Burlington","technology":"Solar","capacity_mw":2.0,"stage":"late","stage_confidence":0.92,"ia_status":"IA Executed","cod":"2026-12-31","tax_credit":{"type":"ITC","base_pct":0.3,"energy_community_bonus":0.1,"domestic_content_bonus":0.1,"total_pct":0.5,"eligible_basis_usd":5800000,"estimated_value_usd":2900000},"deal_score":84,"deal_grade":"A-","investability_drivers":["developer_tier=major_utility","ia_executed","stackable_bonuses"],"risks":["interconnection cost true-up pending"]}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/investable":{"get":{"tags":["Deals"],"summary":"Pre-screened investable projects with grades","description":"Curated subset of projects that pass investability screening. Each project carries a 0-100 score and letter grade. Filter by `min_score`, `state`, `technology`, and `stage`.","operationId":"list_investable_investable_get","parameters":[{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"State filter (comma-separated)","title":"State"},"description":"State filter (comma-separated)"},{"name":"region","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO/RTO filter (PJM, MISO, ERCOT, CAISO, NYISO, SPP, ISO-NE)","title":"Region"},"description":"ISO/RTO filter (PJM, MISO, ERCOT, CAISO, NYISO, SPP, ISO-NE)"},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Technology filter (Solar, Battery, etc.)","title":"Type"},"description":"Technology filter (Solar, Battery, etc.)"},{"name":"construction_stage","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Stage filter (late, construction, mid)","title":"Construction Stage"},"description":"Stage filter (late, construction, mid)"},{"name":"min_confidence","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":1,"minimum":0},{"type":"null"}],"description":"Minimum construction stage confidence (0.0-1.0)","title":"Min Confidence"},"description":"Minimum construction stage confidence (0.0-1.0)"},{"name":"developer_tier","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Developer tier filter","title":"Developer Tier"},"description":"Developer tier filter"},{"name":"min_mw","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum capacity MW","title":"Min Mw"},"description":"Minimum capacity MW"},{"name":"max_mw","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum capacity MW","title":"Max Mw"},"description":"Maximum capacity MW"},{"name":"min_score","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum investability score","title":"Min Score"},"description":"Minimum investability score"},{"name":"energy_community","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Energy community eligible only","title":"Energy Community"},"description":"Energy community eligible only"},{"name":"low_income","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Low-income eligible only","title":"Low Income"},"description":"Low-income eligible only"},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort field","default":"investability_score","title":"Sort"},"description":"Sort field"},{"name":"order","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"asc or desc","default":"desc","title":"Order"},"description":"asc or desc"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":[{"queue_id":"PJM-AE2-123","name":"Brookside Solar","state":"NJ","technology":"Solar","capacity_mw":2.0,"stage":"late","developer":"NextEra Energy Resources","investability_score":78,"grade":"B+","tax_credit_value_usd":2900000}],"meta":{"total":5316,"page":1,"per_page":50}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/investable/summary":{"get":{"tags":["Deals"],"summary":"Aggregate investable statistics","description":"Score distribution and capacity totals across investable projects.","operationId":"investable_summary_investable_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"total_investable":5316,"total_capacity_mw":248000.0,"by_grade":[{"grade":"A","count":412,"avg_score":91},{"grade":"A-","count":689,"avg_score":83},{"grade":"B+","count":1207,"avg_score":76},{"grade":"B","count":1842,"avg_score":68}],"by_stage":{"late":1820,"construction":612,"mid":1493,"early":1391}}}}}}}},"/deals/{queue_id}/sheet":{"get":{"tags":["Deals"],"summary":"1-page HTML deal sheet (printable to PDF)","description":"Returns a single-page styled HTML brief for a project. Designed to print as a PDF for sharing with LPs or committee.","operationId":"deal_sheet_deals__queue_id__sheet_get","parameters":[{"name":"queue_id","in":"path","required":true,"schema":{"type":"string","title":"Queue Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":"<html><body><h1>Brookside Solar — Deal Sheet</h1>...</body></html>"}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/deals/sheets/batch":{"post":{"tags":["Deals"],"summary":"Batch deal sheet generation","description":"Submit up to 50 queue IDs and receive bundled HTML deal sheets in a single response.","operationId":"deal_sheets_batch_deals_sheets_batch_post","parameters":[{"name":"queue_ids","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated queue IDs","title":"Queue Ids"},"description":"Comma-separated queue IDs"},{"name":"min_score","in":"query","required":false,"schema":{"type":"integer","description":"Minimum investability score (for auto-select)","default":70,"title":"Min Score"},"description":"Minimum investability score (for auto-select)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"description":"Max projects to generate","default":5,"title":"Limit"},"description":"Max projects to generate"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"submitted":12,"rendered":12,"failed":0,"deal_sheets":[{"queue_id":"PJM-AE2-123","html":"<html>...</html>"}]}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ferc/plants":{"get":{"tags":["Reference"],"summary":"FERC Form 1 plant financials","description":"Plant-level financials for utility-owned generation. Useful for repower / acquisition modeling.","operationId":"ferc_plants_ferc_plants_get","parameters":[{"name":"utility","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by utility name (partial match)","title":"Utility"},"description":"Filter by utility name (partial match)"},{"name":"fuel_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by fuel type (gas, coal, solar, wind, etc.)","title":"Fuel Type"},"description":"Filter by fuel type (gas, coal, solar, wind, etc.)"},{"name":"plant_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by plant type (combined_cycle, steam, etc.)","title":"Plant Type"},"description":"Filter by plant type (combined_cycle, steam, etc.)"},{"name":"year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by report year","title":"Year"},"description":"Filter by report year"},{"name":"year_from","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Report year from","title":"Year From"},"description":"Report year from"},{"name":"year_to","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Report year to","title":"Year To"},"description":"Report year to"},{"name":"min_capacity","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum capacity MW","title":"Min Capacity"},"description":"Minimum capacity MW"},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort field","default":"capacity_mw","title":"Sort"},"description":"Sort field"},{"name":"order","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"asc or desc","default":"desc","title":"Order"},"description":"asc or desc"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":[{"plant_id":"PEPC-Brunner","owner":"Pepco","capacity_mw":240,"book_value_usd":145000000,"year_in_service":2009}],"meta":{"total":4120,"page":1,"per_page":50}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ferc/plants/{plant_id}":{"get":{"tags":["Reference"],"summary":"Single FERC plant detail","description":"All FERC-reported fields for one plant including depreciation schedule.","operationId":"ferc_plant_detail_ferc_plants__plant_id__get","parameters":[{"name":"plant_id","in":"path","required":true,"schema":{"type":"integer","title":"Plant Id"}},{"name":"year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Specific report year (default: latest)","title":"Year"},"description":"Specific report year (default: latest)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"plant_id":"PEPC-Brunner","owner":"Pepco","state":"MD","primary_fuel":"natural_gas","capacity_mw":240,"book_value_usd":145000000,"accumulated_depreciation_usd":62000000}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ferc/gia":{"get":{"tags":["Reference"],"summary":"FERC-filed interconnection agreements (GIA/LGIA/SGIA)","description":"Executed interconnection agreements parsed from FERC eLibrary filings — the document behind an `ia_executed` event.\n\nCarries the interconnection customer, capacity in both MW and MVA, service type (NRIS/ERIS), agreement date, docket, and the queue ID it matched to with the match method. ","operationId":"list_ferc_gia_ferc_gia_get","parameters":[{"name":"provider","in":"query","required":false,"schema":{"type":"string","description":"Filter by provider (southern, miso, pjm, caiso, …)","title":"Provider"},"description":"Filter by provider (southern, miso, pjm, caiso, …)"},{"name":"state","in":"query","required":false,"schema":{"type":"string","description":"Filter by state (2-letter)","title":"State"},"description":"Filter by state (2-letter)"},{"name":"ic_queue_id","in":"query","required":false,"schema":{"type":"string","description":"Filter by interconnection-customer queue id","title":"Ic Queue Id"},"description":"Filter by interconnection-customer queue id"},{"name":"agreement_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by document type (GIA, NSA, SGIA, …)","title":"Agreement Type"},"description":"Filter by document type (GIA, NSA, SGIA, …)"},{"name":"min_capacity_mw","in":"query","required":false,"schema":{"type":"number","minimum":0,"description":"Minimum capacity (MW)","title":"Min Capacity Mw"},"description":"Minimum capacity (MW)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":[{"accession":"20260220-5019","provider":"miso","interconnection_customer":"Interstate Power and Light Company","transmission_provider":null,"ic_queue_id":null,"ic_queue_id_all":null,"project_name":"Interstate Power","capacity_mw":150.0,"capacity_mva":305.0,"technology":"Storage","state":null,"point_of_interconnection":null,"poi_voltage_kv":null,"service_type":"NRIS","agreement_type":"GIA","filing_date":null,"agreement_date":"February 18, 2026","docket":"ER04-691","planned_modifications":null,"network_upgrade_cost_total":null}],"meta":{"count":100,"source":"FERC eLibrary GIA/LGIA filings"}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ferc/filings":{"get":{"tags":["Reference"],"summary":"FERC filings ledger for a project or docket","description":"The filings ledger joined to parsed agreement facts — accession, provider, filing type, filed date, docket, disposition, and the queue ID it matched to. ","operationId":"list_ferc_filings_ferc_filings_get","parameters":[{"name":"provider","in":"query","required":false,"schema":{"type":"string","description":"Filter by provider (miso, pjm, caiso, …)","title":"Provider"},"description":"Filter by provider (miso, pjm, caiso, …)"},{"name":"filing_type","in":"query","required":false,"schema":{"type":"string","description":"LGIA | SGIA | GIA | ISA | Cancellation | Study | other","title":"Filing Type"},"description":"LGIA | SGIA | GIA | ISA | Cancellation | Study | other"},{"name":"disposition","in":"query","required":false,"schema":{"type":"string","description":"discovered | stored | skipped_empty | skipped_redundant | skipped_other | error","title":"Disposition"},"description":"discovered | stored | skipped_empty | skipped_redundant | skipped_other | error"},{"name":"filed_after","in":"query","required":false,"schema":{"type":"string","description":"ISO date lower bound (YYYY-MM-DD)","title":"Filed After"},"description":"ISO date lower bound (YYYY-MM-DD)"},{"name":"queue_id","in":"query","required":false,"schema":{"type":"string","description":"Only filings parsed to this interconnection queue id","title":"Queue Id"},"description":"Only filings parsed to this interconnection queue id"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":[{"accession":"20260220-5019","provider":"miso","filing_type":"GIA","filed_date":"2026-02-20","docket":"ER04-691","disposition":"Accepted","interconnection_customer":"Interstate Power and Light Company","capacity_mw":150.0,"cod":"2027-06-01","ic_queue_id":"J1359"}],"meta":{"count":1,"source":"FERC filings ledger (TEMP-02) + additive ferc_gia parse"}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ferc/project/{queue_id}":{"get":{"tags":["Reference"],"summary":"Every FERC document matched to one queue project","description":"All FERC filings matched to a single interconnection queue ID, with the project record and a document count. This is the provenance view — the documents a project's FERC-sourced fields came from. ","operationId":"ferc_project_timeline_ferc_project__queue_id__get","parameters":[{"name":"queue_id","in":"path","required":true,"schema":{"type":"string","title":"Queue Id"}},{"name":"region","in":"query","required":false,"schema":{"type":"string","title":"Region"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"queue_id":"J1359","project":{"queue_id":"J1359","region":"MISO","name":"Interstate Power","developer":"Interstate Power and Light Company","state":"IA","county":"Linn County","capacity_mw":199.8,"status":"Operational","gia_cancelled":null,"gia_cancellation_date":null,"gia_cancellation_reason":null},"n_documents":8,"documents":[{"accession":"20260108-5042","filing_date":null,"doc_type":"body","agreement_type":"GIA","provider":"miso","ic_queue_id":null,"interconnection_customer":"Interstate Power and Light Company","transmission_provider":null,"project_name":"Interstate Power","capacity_mw":350.0,"network_upgrade_cost_total":null,"commercial_operation_date":null,"agreement_date":"December 22, 2025","planned_modifications":null}]}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/caiso/queue/status":{"get":{"tags":["Reference"],"summary":"Is the CAISO queue spine captured, complete and durable?","description":"Row counts across the report's three sheets, when we last pulled versus the date the file states about itself, per-column population, and whether the raw bytes are landing somewhere that survives a deploy. CAISO regenerates publicqueuereport.xlsx daily and keeps no archive, so a stalled `blobs` count means history is being destroyed, not merely going stale. ","operationId":"caiso_queue_status_caiso_queue_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"loaded":true,"rows":2278,"by_sheet":{"Grid GenerationQueue":266,"Completed Generation Projects":251,"Withdrawn Generation Projects":1761},"by_status":{"Withdrawn":1761,"Active":266,"Operational":251},"fetched_at":"2026-08-17T22:45:03.118921+00:00","data_as_of":"2026-08-17","by_state":{"CA":2076,"NV":104,"AZ":72,"MX":18,"ID":2,"WY":1,"NM":1},"columns_stored":38,"populated":{"withdrawal_reason":683,"withdrawn_date":1722,"actual_online_date":238,"current_online_date":2022,"proposed_online_date":2277,"off_peak_deliverability":606,"tpd_allocation_pct":73,"ia_status":568},"raw_archive":{"checked":true,"durable":true,"root":"/data/raw","blobs":2,"bytes":444562,"distinct_days":1,"first_day":"2026-08-17","last_day":"2026-08-17"},"source":"CAISO Public Queue Report (publicqueuereport.xlsx, 3 sheets)"}}}}}}},"/caiso/public/status":{"get":{"tags":["Reference"],"summary":"CAISO public-queue dataset load status","description":"Which CAISO public report datasets are loaded, how many rows each holds, and how many CAISO resource IDs matched into the queue spine. ","operationId":"caiso_public_status_caiso_public_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"loaded":true,"datasets":{"caiso_resource_ids":{"rows":231,"last_fetched_at":"2026-07-20T15:30:00.178840+00:00","desc":"RES_ID + component MW + COD/sync (queue-joined)"},"caiso_deficient_buses":{"rows":307,"last_fetched_at":"2026-07-13T15:30:00.357137+00:00","desc":"grid-constraint buses/POIs"},"caiso_unit_costs":{"rows":478,"last_fetched_at":"2026-07-20T15:30:46.866417+00:00","desc":"per-unit cost guides ($ by voltage, all PTOs)"},"caiso_study_timeline":{"rows":47,"last_fetched_at":"2026-07-20T15:30:47.030521+00:00","desc":"cluster process schedule"}},"resource_id_queue_matches":139,"caiso_queue_audit":{"total":10397,"active":1244,"by_source":{"interconnection_fyi":6984,"caiso":325,"lbl":2512,"sdge_dg":86,"ca_dg_stats":490},"field_coverage":{"study_phase":{"populated":2277,"pct":21.9},"feasibility_study_status":{"populated":256,"pct":2.5},"system_impact_study_status":{"populated":1323,"pct":12.7},"facilities_study_status":{"populated":908,"pct":8.7},"ia_status":{"populated":2834,"pct":27.3},"actual_cod":{"populated":2233,"pct":21.5}}}}}}}}}},"/pjm/cycle":{"get":{"tags":["Reference"],"summary":"PJM transition-cycle queue status","description":"PJM's cycle-based queue — the full C01 / TC2 / TC1 cohort: per-project cycle, phase, and the status of each SIS phase and the GIA. This is the feed that carries PJM study-phase transitions, and the only PJM source with a developer on every record. ","operationId":"pjm_cycle_list_pjm_cycle_get","parameters":[{"name":"cycle","in":"query","required":false,"schema":{"type":"string","description":"Filter by cycle (TC1, TC2)","title":"Cycle"},"description":"Filter by cycle (TC1, TC2)"},{"name":"stage","in":"query","required":false,"schema":{"type":"string","description":"Filter by study stage (PHASE 1, PHASE 2, PHASE 3, DP1)","title":"Stage"},"description":"Filter by study stage (PHASE 1, PHASE 2, PHASE 3, DP1)"},{"name":"status","in":"query","required":false,"schema":{"type":"string","description":"Filter by status (Active, Withdrawn, …)","title":"Status"},"description":"Filter by status (Active, Withdrawn, …)"},{"name":"state","in":"query","required":false,"schema":{"type":"string","description":"Filter by state","title":"State"},"description":"Filter by state"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":[{"queue_id":"AH1-563","cycle":"TC2","stage":"PHASE 2","status":"Active","project_name":"Aurora Battery Storage II","developers":"Aurora Generation, LLC","state":"IL","capacity_mw":150.0,"phase1_sis_status":"Posted","requested_isd":"2029-06-01"}],"meta":{"count":100,"source":"PJM Cycle Service Request Status (study stage)"}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/pjm/cycle/status":{"get":{"tags":["Reference"],"summary":"Is the PJM cycle lane alive?","description":"Rows held per cycle and per stage, how fresh the last pull is, how many study-report URLs are indexed, and whether the raw exports are landing somewhere durable. `fetched_at` is when we last pulled; `data_as_of` is the newest change PJM itself reports — a lane can be pulling daily off a feed that stopped moving, which is exactly what happened here through 2026. ","operationId":"pjm_cycle_status_pjm_cycle_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"loaded":true,"rows":1792,"by_cycle":{"C01":829,"TC2":648,"TC1":315},"by_stage":{"Phase 1":731,"PHASE 2":328,"PHASE 1":222,"Decision Point 1":172,"FINAL AGREEMENT":86},"by_study_phase":{"Phase 1":953,"Phase 2":328,"Decision Point 1":174,"Application Review":142,"Final Agreement":94},"fetched_at":"2026-08-17T22:30:11.402913+00:00","data_as_of":"2026-08-17","last_change":"2026-08-17","document_urls_held":{"phase1":751,"phase2":476,"phase3":130,"final_agreement":87,"gia":92,"csa":19},"source":"PJM Cycle Service Request Status (GenerateXMLTransitionProjectsAll)","raw_archive":{"checked":true,"durable":true,"root":"/data/raw","blobs":1,"bytes":3732374,"manifest_days":1,"first_day":"2026-08-17","last_day":"2026-08-17"}}}}}}}},"/pjm/cycle/{queue_id}":{"get":{"tags":["Reference"],"summary":"PJM cycle status for one queue ID","description":"Cycle, phase, per-phase SIS status, GIA status and projected/revised in-service dates for a single PJM queue position. ","operationId":"pjm_cycle_detail_pjm_cycle__queue_id__get","parameters":[{"name":"queue_id","in":"path","required":true,"schema":{"type":"string","title":"Queue Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"queue_id":"AG1-326","data":{"queue_id":"AG1-326","previous_queue":null,"cycle":"TC2","stage":"APPLICATION PHASE","status":"Active","project_name":"Circleville-Biers Run 138 kV","state":"OH","county":"Ross","mfo_mw":59.0,"capacity_mw":35.4,"developers":"Innergex Renewables USA, LLC","transmission_owners":"AEP","fuel_types":"Solar","submitted_date":"2020-09-30","requested_isd":"2023-12-31","revised_isd":null,"projected_isd":"2023-12-31","actual_isd":null,"withdrawn_date":null,"phase1_sis_status":null}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/projects/{queue_id}/claims":{"get":{"tags":["Reference"],"summary":"Every source's claim for this project — including the ones that lost","description":"`docs/VISION.md` promises this in as many words: *\"Every other product in this space silently picks one. We show both, say which we believe, and say why.\"* The rows have always existed — `field_claims` is one row per source per field per project, never overwritten — but no endpoint read them, so `projects.<field>_source` named the winner and the loser was unreachable. 🔴 **`scope` is why two numbers can differ without disagreeing.** FERC's `network_upgrade_cost` is the GIA §4.2 charge with the Transmission Owner Interconnection Facilities Charge excluded; a PJM cycle report totals it in. Measured on AE1-092 the gap was $796,612 — exactly that project's TOIF line. Claims that do not share a scope are reported `comparable: false` and are NOT resolved against each other. `raw_id` joins to `raw_artifact`, which names the sha256 and the archived bytes each value was read out of.","operationId":"project_claims_projects__queue_id__claims_get","parameters":[{"name":"queue_id","in":"path","required":true,"schema":{"type":"string","title":"Queue Id"}},{"name":"region","in":"query","required":false,"schema":{"type":"string","description":"PJM, MISO, CAISO … omit to return every region","title":"Region"},"description":"PJM, MISO, CAISO … omit to return every region"},{"name":"field","in":"query","required":false,"schema":{"type":"string","description":"one canonical field, e.g. network_upgrade_cost","title":"Field"},"description":"one canonical field, e.g. network_upgrade_cost"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"loaded":true,"queue_id":"AE1-092","region":"PJM","claim_count":2,"by_field":{"network_upgrade_cost":{"claims":[{"queue_id":"AE1-092","region":"PJM","field":"network_upgrade_cost","value":"14467553.0","source":"ferc_gia","observed_at":"2024-03-14","confidence":0.6,"raw_id":20114,"scope":"network_upgrades_charge_excl_toif","updated_at":"2026-08-21T02:10:00Z"},{"queue_id":"AE1-092","region":"PJM","field":"network_upgrade_cost","value":"14467553.0","source":"pjm_cycle_report","observed_at":"2026-08-20T22:04:11Z","confidence":0.9,"raw_id":41822,"scope":"network_upgrades_charge_excl_toif","updated_at":"2026-08-21T02:10:00Z"}],"sources":["ferc_gia","pjm_cycle_report"],"distinct_values":1,"scopes":["network_upgrades_charge_excl_toif"],"comparable":true}}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/pjm/cycle-costs":{"get":{"tags":["Reference"],"summary":"Itemized network-upgrade costs from PJM cycle study reports, traceable to bytes","description":"Line items extracted from the `_imp_PHASE_*` HTML study reports PJM publishes, which carry an **itemized** cost where the legacy feasibility PDFs carry one total. **Every row carries `raw_id`** — it joins to `raw_artifact`, which names the sha256 and the archived blob, so any figure here traces to the bytes PJM served in one query chain. 🔴 **`total_usd: null` is not `$0`.** One report in ten is a *withdrawn* project for which PJM publishes a stub containing no study; a withdrawn project did not cost nothing. `outcomes` tells you how many documents are `parsed`, `withdrawn` (a publisher fact) and `no_cost_table` (a parser gap) so those three never collapse into one number. `subject_to_label` varies by phase — `FINAL` reports say *Security*, `PHASE_*` say *Readiness* — so it is returned per row rather than assumed.","operationId":"pjm_cycle_costs_pjm_cycle_costs_get","parameters":[{"name":"queue_id","in":"query","required":false,"schema":{"type":"string","description":"one PJM cycle project, e.g. AE1-092","title":"Queue Id"},"description":"one PJM cycle project, e.g. AE1-092"},{"name":"phase","in":"query","required":false,"schema":{"type":"string","description":"cycle_impact_phase_1 | _phase_2 | _phase_3 | _final","title":"Phase"},"description":"cycle_impact_phase_1 | _phase_2 | _phase_3 | _final"},{"name":"totals_only","in":"query","required":false,"schema":{"type":"boolean","description":"one row per document — the study's Total line","default":false,"title":"Totals Only"},"description":"one row per document — the study's Total line"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":2000,"default":200,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"loaded":true,"parsed":true,"count":112,"returned":3,"limit":200,"offset":0,"rows":[{"queue_id":"AE1-092","doc_type":"cycle_impact_final","line_item":"Transmission Owner Interconnection Facilities (TOIF)","allocated_usd":796612.0,"subject_to_label":"Security","subject_to_usd":796612.0,"is_total":0,"sha256":"2c18171e6e3f…","raw_id":41822,"extracted_at":"2026-08-20T19:05:11Z"},{"queue_id":"AE1-092","doc_type":"cycle_impact_final","line_item":"Total","allocated_usd":15264165.0,"subject_to_label":"Security","subject_to_usd":15264165.0,"is_total":1,"sha256":"2c18171e6e3f…","raw_id":41822,"extracted_at":"2026-08-20T19:05:11Z"},{"queue_id":"AH1-727","doc_type":"cycle_impact_phase_2","line_item":"Total","allocated_usd":59552364.0,"subject_to_label":"Readiness","subject_to_usd":0.0,"is_total":1,"sha256":"08bdb95bdbf3…","raw_id":41830,"extracted_at":"2026-08-20T19:05:11Z"}],"outcomes":{"parsed":9,"withdrawn":1},"outcomes_note":"`withdrawn` is a publisher fact, not a parse failure, and its cost is null rather than 0. `no_cost_table` is a parser gap."}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/pjm/cycle-costs/{queue_id}":{"get":{"tags":["Reference"],"summary":"One project's cost across its study phases — the revision view","description":"`docs/PRODUCT.md` calls a cost estimate tripling between phases **the withdrawal predictor**, and notes it requires the *history*, not the current value. 83 PJM projects hold all four phases. `cost_revision` is computed **only across phases that actually produced a total**. Where fewer than two do, it is `null` with a stated reason rather than a delta against a missing value — a level is not a revision, and a delta against a null would be an invented number.","operationId":"pjm_cycle_cost_history_pjm_cycle_costs__queue_id__get","parameters":[{"name":"queue_id","in":"path","required":true,"schema":{"type":"string","title":"Queue Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"loaded":true,"parsed":true,"queue_id":"AG1-083","phases":[{"doc_type":"cycle_impact_phase_1","outcome":"parsed","total_usd":5083752.0,"subject_to_label":"Readiness","n_cost_rows":11,"sha256":"9b41f0c2…","raw_id":41826,"extracted_at":"2026-08-20T19:05:11Z"},{"doc_type":"cycle_impact_phase_2","outcome":"parsed","total_usd":17414205.0,"subject_to_label":"Readiness","n_cost_rows":13,"sha256":"538d74f5…","raw_id":41827,"extracted_at":"2026-08-20T19:05:11Z"}],"line_items":[{"doc_type":"cycle_impact_phase_1","line_item":"Total","allocated_usd":5083752.0,"subject_to_label":"Readiness","subject_to_usd":5083752.0,"is_total":1,"raw_id":41826}],"totals_by_phase":{"cycle_impact_phase_1":5083752.0,"cycle_impact_phase_2":17414205.0},"cost_revision":{"from_phase":"cycle_impact_phase_1","to_phase":"cycle_impact_phase_2","from_usd":5083752.0,"to_usd":17414205.0,"delta_usd":12330453.0,"multiple":3.425}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/pjm/documents":{"get":{"tags":["Reference"],"summary":"Every study and agreement document PJM publishes, indexed","description":"The 15,355 document URLs embedded in PJM's serial queue export, with the document type, PJM's own status for it, the publishing directory and the file extension. **This is the index, not the documents** — no PDF has been fetched. `feed_sha256` is the hash of the XML export the URL was read out of, so every row traces to archived bytes on disk. Filter by `doc_type` for a single class (`feasibility_study` is the largest at 5,352). ","operationId":"pjm_documents_list_pjm_documents_get","parameters":[{"name":"doc_type","in":"query","required":false,"schema":{"type":"string","description":"feasibility_study, system_impact_study, facilities_study, interconnection_agreement, construction_service_agreement, wholesale_market_participation_agreement, initial_study, upgrade_construction_service_agreement","title":"Doc Type"},"description":"feasibility_study, system_impact_study, facilities_study, interconnection_agreement, construction_service_agreement, wholesale_market_participation_agreement, initial_study, upgrade_construction_service_agreement"},{"name":"queue_id","in":"query","required":false,"schema":{"type":"string","description":"PJM serial queue id, e.g. AC2-041","title":"Queue Id"},"description":"PJM serial queue id, e.g. AC2-041"},{"name":"project_type","in":"query","required":false,"schema":{"type":"string","description":"Generation Interconnection, Merchant Transmission, Long-Term Firm Transmission, Upgrade Request","title":"Project Type"},"description":"Generation Interconnection, Merchant Transmission, Long-Term Firm Transmission, Upgrade Request"},{"name":"publishing_dir","in":"query","required":false,"schema":{"type":"string","description":"PJM's publishing directory, e.g. feas_docs","title":"Publishing Dir"},"description":"PJM's publishing directory, e.g. feas_docs"},{"name":"file_ext","in":"query","required":false,"schema":{"type":"string","description":"pdf, htm, html","title":"File Ext"},"description":"pdf, htm, html"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":[{"doc_id":"A01:feasibility_study","queue_id":"A01","project_type":"Generation Interconnection","doc_type":"feasibility_study","url":"https://www.pjm.com/pjmfiles/pub/planning/project-queues/feas_docs/a01_fea.pdf","publishing_dir":"feas_docs","file_ext":"pdf","doc_status":"Document Posted","feed_sha256":"a78d88db91340529dd6ed679ae42bef9e582c945aa27facd6d9098401703a85c","first_seen_at":"2026-08-18T22:45:12.104881+00:00","last_seen_at":"2026-08-18T22:45:12.104881+00:00","data_as_of":"2026-08-18"}],"meta":{"count":1,"matching":5352,"limit":100,"offset":0,"source":"PJM PlanningQueues.xml document index (not fetched)"}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/pjm/documents/status":{"get":{"tags":["Reference"],"summary":"What is in the PJM document index, and how fresh is it?","description":"Documents held by type, publishing directory, file extension and project type, plus freshness and the archive summary. **`data_as_of` here is PJM's `Last-Modified` on the export** — when PJM last *rebuilt* the file, not when its contents last changed; the serial export carries no change date of its own. `feed_sha256` is the real change signal: if `data_as_of` advances while the hash stands still, PJM is rebuilding a file that is not moving. `projects_with_documents` is the honest denominator — 9,263 projects are in the export and only 5,806 publish anything, so the other 3,457 are not a coverage gap. ","operationId":"pjm_documents_status_pjm_documents_status_get","parameters":[{"name":"verify_blobs","in":"query","required":false,"schema":{"type":"boolean","description":"Re-hash every blob the fetch rows claim. `fetched` counts ROWS that say a fetch succeeded; it does not touch a byte. Without this the response carries still_held: null and still_held_checked: false rather than implying they are equal. Costs one file hash per held document.","default":false,"title":"Verify Blobs"},"description":"Re-hash every blob the fetch rows claim. `fetched` counts ROWS that say a fetch succeeded; it does not touch a byte. Without this the response carries still_held: null and still_held_checked: false rather than implying they are equal. Costs one file hash per held document."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"loaded":true,"documents":15355,"projects_with_documents":5806,"by_doc_type":{"feasibility_study":5352,"system_impact_study":4333,"interconnection_agreement":1833,"construction_service_agreement":1433,"facilities_study":1325,"wholesale_market_participation_agreement":721,"initial_study":357,"upgrade_construction_service_agreement":1},"by_publishing_dir":{"feas_docs":5216,"impact_studies":4016,"isa":1526,"csa":1395,"facilities":1279,"wmpa":722},"by_file_ext":{"pdf":14954,"htm":381,"html":16,"null":4},"by_project_type":{"Generation Interconnection":14447,"Long-Term Firm Transmission":550,"Merchant Transmission":284,"Upgrade Request":74},"fetched_at":"2026-08-18T22:45:12.104881+00:00","data_as_of":"2026-08-18","feed_sha256":"a78d88db91340529dd6ed679ae42bef9e582c945aa27facd6d9098401703a85c","source":"PJM PlanningQueues.xml (serial queue export)","fetch":{"loaded":true,"doc_type":"feasibility_study","published":5352,"fetched":100,"failed":1,"remaining":5252,"bytes":2841190,"not_pdf":0,"indexed":100,"by_http_status":{"200":100,"302":1}},"artifact_index":{"checked":true,"rows":101,"by_source":{"pjm":{"rows":101,"with_data_as_of":1,"with_posted_date":100,"from_fetch":101,"from_backfill":0,"newest":"2026-08-19T00:41:02+00:00"}}},"raw_archive":{"checked":true,"durable":true,"root":"/data/raw","blobs":2,"bytes":26974076,"manifest_days":1,"first_day":"2026-08-18","last_day":"2026-08-18"}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ferc/gia/status":{"get":{"tags":["Reference"],"summary":"FERC GIA corpus coverage and match quality","description":"How much of the FERC agreement corpus is parsed and matched: counts by provider, document type, agreement type and match method, plus the confident-match rate and the measured cross-region false-positive rate. ","operationId":"ferc_gia_status_ferc_gia_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"loaded":true,"bodies":3143,"by_provider":{"pjm":1812,"miso":708,"southern":7,"isone":22,"caiso":148,"unknown":104},"by_doc_type":{"facilities":29,"transmittal":3721,"cancellation":313,"body":3143,"non_gia":722},"by_match_method":{"queue_id+region":233,"name":199,"queue_id+attrs":366,"queue_id_weak":1,"no-match":640,"queue_id+name":1704},"by_agreement_type":{"(null)":108,"CSA":78,"Amended ISA":7,"Amended WMPA":3,"Amended and Restated GIA":349,"ISA":789},"by_agreement_type_match":{"(null)":{"n":108,"matched":2,"match_pct":0.019},"CSA":{"n":78,"matched":74,"match_pct":0.949},"Amended ISA":{"n":7,"matched":6,"match_pct":0.857},"Amended WMPA":{"n":3,"matched":3,"match_pct":1.0},"Amended and Restated GIA":{"n":349,"matched":260,"match_pct":0.745},"ISA":{"n":789,"matched":737,"match_pct":0.934}},"child_rows":{"ferc_gia_milestones":20465,"ferc_gia_costs":4670,"ferc_gia_cluster_projects":5811,"ferc_gia_mtep":1288},"confident_matches":2502,"confident_match_rate":0.7961,"cross_region_fp":0,"cross_region_fp_rate":0.0,"exit_notices":313,"exit_notices_by_type":{"Withdrawal":2,"Termination":65,"Cancellation":246},"exit_notices_matched":175,"exit_notices_match_rate":0.5591,"projects_flagged_cancelled":139,"projects_flagged_with_reason":64,"facilities_docs":29,"projects_shared_facilities":3,"enriched_projects":1184,"enriched_by_region":{"CAISO":38,"ISO-NE":7,"MISO":173,"NYISO":60,"PJM":751,"Southeast":1},"processed_accessions":25967,"processed_empty":22843,"last_run_date":null,"last_refresh_result":{"success":true,"window":"2026-05-28..2026-06-18","discovered":832,"processing":20,"ingested":20,"matched":1},"last_backfill_result":{"success":true,"range":"2008-01-01..2026-08-11","filter":"Pacific Gas and Electric","candidate_filings":41,"already_stored":41,"ingested":0},"backfill_progress_by_provider":{"iso new england":{"success":true,"range":"2008-01-01..2026-08-10","filter":"ISO New England","candidate_filings":124,"already_stored":124,"ingested":0},"southern california edison":{"success":true,"range":"2008-01-01..2026-08-10","filter":"Southern California Edison","candidate_filings":373,"already_stored":373,"ingested":0},"pjm":{"success":true,"range":"2008-01-01..2026-08-11","filter":"PJM","candidate_filings":1297,"already_stored":1297,"ingested":0},"san diego gas":{"success":true,"range":"2008-01-01..2026-08-10","filter":"San Diego Gas","candidate_filings":18,"already_stored":18,"ingested":0},"california independent system operator":{"success":true,"range":"2008-01-01..2026-08-11","filter":"California Independent System Operator","candidate_filings":31,"already_stored":31,"ingested":0},"midcontinent":{"success":true,"range":"2008-01-01..2026-08-11","filter":"Midcontinent","candidate_filings":1601,"already_stored":1599,"ingested":0}},"last_exit_backfill_result":{"ts":"2026-08-11T02:48:21.285786+00:00","texts":4,"discovered":33,"ingested":0,"skipped":33,"errors":0},"last_facilities_backfill_result":{"ts":"2026-08-11T02:41:02.195622+00:00","discovered":798,"ingested":0,"skipped":798,"errors":0,"enrich":{"facilities_docs":29,"projects_flagged":8}},"last_comprehensive_backfill_result":{"ts":"2026-08-11T03:00:00.209342+00:00","texts":1,"discovered":0,"ingested":0,"skipped":0,"errors":0}}}}}}}},"/miso/dpp/status":{"get":{"tags":["Reference"],"summary":"MISO Definitive Planning Phase study coverage","description":"How many MISO DPP study reports are discovered, processed and enriched, broken down by phase, with the cost-figure spread across enriched projects. ","operationId":"miso_dpp_status_miso_dpp_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"loaded":true,"reports":78,"projects":3829,"projects_with_cost":1107,"upgrades":1215,"reports_by_phase":{"?":4,"1":28,"3":23,"2":23},"processed_reports":78,"enriched_projects":543,"enriched_cost_min_avg_max":[0],"last_refresh":{"success":true,"discovered":88,"already_processed":78,"ingested":0,"projects":0,"upgrades":0,"errors":10,"reprocess":false,"enriched_main_db":543}}}}}}}},"/miso/dpp/{project_id}":{"get":{"tags":["Reference"],"summary":"MISO DPP studies and network upgrades for one project","description":"Per-project MISO Definitive Planning Phase study rows and their assigned network upgrades — the source of MISO interconnection cost estimates. ","operationId":"miso_dpp_project_miso_dpp__project_id__get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"project_id":"J1359","studies":[{"report_id":"626138","project_id":"J1359","fuel":"NRIS","transmission_owner":"ITCM","county":"Linn","state":"IA","service_type":"Oakridge 69 kV","mw":null,"poi":"95 95 0 95","total_network_upgrade_cost":616079,"cycle":"2019-WES","area":"West","phase":3,"milestone_m2":0},{"report_id":"622660","project_id":"J1359","fuel":"NRIS","transmission_owner":"ITCM","county":"Linn","state":"IA","service_type":"Oakridge 69 kV","mw":null,"poi":"95 95 0 95","total_network_upgrade_cost":380000,"cycle":"2019-WES","area":"West","phase":2,"milestone_m2":0}],"network_upgrades":[{"report_id":"622660","upgrade_name":"J1471,J1479","full_cost":0,"allocated_cost":0,"nu_type":"P2-P7"},{"report_id":"622660","upgrade_name":"J1190,J1432","full_cost":0,"allocated_cost":0,"nu_type":"P1"}]}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ferc/gia/{accession}":{"get":{"tags":["Reference"],"summary":"One FERC agreement by accession number","description":"The full parsed record for a single FERC eLibrary accession, including child rows (network upgrades, cost allocations) where the filing carries them. ","operationId":"get_ferc_gia_ferc_gia__accession__get","parameters":[{"name":"accession","in":"path","required":true,"schema":{"type":"string","title":"Accession"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":{"accession":"20260220-5019","filename":"20260220-5019_Tab A - R5064 GIA - Public.pdf","doc_type":"body","provider":"miso","interconnection_customer":"Interstate Power and Light Company","ic_queue_id":null,"ic_queue_id_all":null,"project_name":"Interstate Power","transmission_provider":null,"filing_agent":null,"agreement_type":"GIA","agreement_date":"February 18, 2026","service_agreement_no":"4682","docket":"ER04-691","capacity_mw":150.0,"capacity_mva":305.0,"technology":"Storage","county":null,"state":null,"point_of_interconnection":null}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/entities/resolve":{"get":{"tags":["Entities"],"summary":"Resolve a developer/SPV name to FERC MBR ownership + assets","description":"Fuzzy-matches a developer or SPV name against the FERC Market-Based Rate database (Order 860) and returns ownership edges, controlled assets, and ultimate parents.","operationId":"resolve_entity_entities_resolve_get","parameters":[{"name":"name","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Developer / SPV name to resolve (partial match)","title":"Name"},"description":"Developer / SPV name to resolve (partial match)"},{"name":"active_only","in":"query","required":false,"schema":{"type":"boolean","description":"Only currently-active ownership edges","default":true,"title":"Active Only"},"description":"Only currently-active ownership edges"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"query":"NextEra","data":{"ownership_edges":[{"parent_name":"NextEra Energy Inc","child_name":"NextEra Energy Resources LLC","relationship_type":"owns","active":true}],"assets":[{"plant_code":"60123","plant_name":"Brazos Solar","capacity_mw":200.0}]},"meta":{"edges":1,"assets":1,"source":"FERC MBR (Order 860)"}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/entities/by-plant/{eia_plant_code}":{"get":{"tags":["Entities"],"summary":"Reporting seller(s) + parent chain for an EIA plant","description":"Given a project's `plant_id_eia`, returns the FERC MBR reporting seller(s) controlling the plant and their ultimate parents.","operationId":"resolve_entity_by_plant_entities_by_plant__eia_plant_code__get","parameters":[{"name":"eia_plant_code","in":"path","required":true,"schema":{"type":"string","title":"Eia Plant Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"eia_plant_code":"60123","data":[{"seller_name":"Brazos Solar Holdings LLC","seller_cid":"C12345","capacity_mw":200.0,"relationship_type":"owns","ultimate_parents":[{"parent_name":"NextEra Energy Inc"}]}],"meta":{"sellers":1,"source":"FERC MBR (Order 860)"}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/entities/mbr/stats":{"get":{"tags":["Entities"],"summary":"FERC MBR entity-resolution coverage stats","description":"Row counts and resolution coverage for the FERC Market-Based Rate entity database.","operationId":"mbr_stats_entities_mbr_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"loaded":true,"source":"FERC Market-Based Rate Database (Order 860)","tables":{"entities":18234,"entities_to_entities":41200,"entities_to_assets":52100},"resolution":{"active_edges":41200,"distinct_sellers":9120,"asset_plant_codes":12800}}}}}}}},"/ferc/utilities":{"get":{"tags":["Reference"],"summary":"FERC utility financial summaries","description":"Top-line financials by utility (revenue, rate base, generation mix).","operationId":"ferc_utilities_ferc_utilities_get","parameters":[{"name":"utility","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by utility name (partial match)","title":"Utility"},"description":"Filter by utility name (partial match)"},{"name":"year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by report year (default: latest available)","title":"Year"},"description":"Filter by report year (default: latest available)"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":[{"utility_id":"PEPC","name":"Pepco","total_revenue_usd":2840000000,"rate_base_usd":8120000000,"state":"MD"}]}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/corporate/ownership/{company}":{"get":{"tags":["Reference"],"summary":"Parent / subsidiary lookup","description":"Returns the ownership chain for a company — parent, subsidiaries, joint ventures.","operationId":"corporate_ownership_corporate_ownership__company__get","parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"string","title":"Company"}},{"name":"direction","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"'subsidiaries' (who they own) or 'parents' (who owns them)","default":"subsidiaries","title":"Direction"},"description":"'subsidiaries' (who they own) or 'parents' (who owns them)"},{"name":"year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by report year","title":"Year"},"description":"Filter by report year"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"company":"NextEra Energy Resources","parent":"NextEra Energy Inc.","subsidiaries":["NEER Capital LLC","FPL Energy"],"joint_ventures":[]}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/corporate/search":{"get":{"tags":["Reference"],"summary":"Search companies by name","description":"Fuzzy company name search with ownership context.","operationId":"corporate_search_corporate_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Company name search","title":"Q"},"description":"Company name search"},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by business state","title":"State"},"description":"Filter by business state"},{"name":"industry","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by SIC industry (partial match)","title":"Industry"},"description":"Filter by SIC industry (partial match)"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"query":"nextera","results":[{"company":"NextEra Energy Inc.","type":"parent","match_score":1.0},{"company":"NextEra Energy Resources","type":"subsidiary","match_score":0.93}]}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/permits":{"get":{"tags":["Reference"],"summary":"Search permits and siting records","description":"6,817 permit / siting records covering interconnection, environmental, and zoning.","operationId":"list_permits_permits_get","parameters":[{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by state (2-letter code)","title":"State"},"description":"Filter by state (2-letter code)"},{"name":"technology","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by technology (Solar, Wind, Gas, etc.)","title":"Technology"},"description":"Filter by technology (Solar, Wind, Gas, etc.)"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status","title":"Status"},"description":"Filter by status"},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by source (eia_860, cec, nyserda)","title":"Source"},"description":"Filter by source (eia_860, cec, nyserda)"},{"name":"queue_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by linked queue_id","title":"Queue Id"},"description":"Filter by linked queue_id"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":[{"permit_id":"TX-PUC-2024-512","project":"Permian Solar 3","type":"interconnection_agreement","status":"approved","filing_date":"2024-08-12"}],"meta":{"total":6817,"page":1,"per_page":50}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/permits/summary":{"get":{"tags":["Reference"],"summary":"Permit coverage by source + match rate","description":"Per-source permit record counts, match rate to projects, counties covered, and latest activity — plus totals across all permit sources.","operationId":"permits_summary_permits_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"totals":{"records":12471,"matched":3204,"match_rate_pct":25.7,"projects_with_permits":2890,"source_count":4},"sources":[{"source":"usace","label":"USACE federal permits","stage":"2-federal","jurisdiction":"Federal","source_url":"https://permits.ops.usace.army.mil","records":1597,"matched":612,"match_rate_pct":38.3,"counties_covered":240,"latest_activity":"2026-06-11"}]}}}}}}},"/ic-costs":{"get":{"tags":["Reference"],"summary":"Interconnection cost studies","description":"3,382 interconnection cost study results — network upgrades, system impact costs.","operationId":"list_ic_costs_ic_costs_get","parameters":[{"name":"region","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by ISO region","title":"Region"},"description":"Filter by ISO region"},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by state","title":"State"},"description":"Filter by state"},{"name":"resource_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by resource type (Solar, Wind, Storage)","title":"Resource Type"},"description":"Filter by resource type (Solar, Wind, Storage)"},{"name":"queue_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by queue_id","title":"Queue Id"},"description":"Filter by queue_id"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":[{"study_id":"MISO-2023-014","project":"Iowa Wind 2","network_upgrade_cost_usd":12400000,"system_impact_cost_usd":1800000}],"meta":{"total":3382,"page":1,"per_page":50}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/regulatory-filings":{"get":{"tags":["Reference"],"summary":"Search FERC + state PUC filings","description":"2,083 regulatory filings across FERC and state utility commissions.","operationId":"list_regulatory_filings_regulatory_filings_get","parameters":[{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by source (ferc, texas_puc)","title":"Source"},"description":"Filter by source (ferc, texas_puc)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by category","title":"Category"},"description":"Filter by category"},{"name":"developer","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by developer (partial match)","title":"Developer"},"description":"Filter by developer (partial match)"},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2},{"type":"null"}],"description":"Search descriptions","title":"Q"},"description":"Search descriptions"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":[{"filing_id":"FERC-EL24-89","docket":"EL24-89-000","title":"Order on PJM Capacity Market Reforms","filed_date":"2024-09-12"}],"meta":{"total":2083,"page":1,"per_page":50}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dg/projects":{"get":{"tags":["DG"],"summary":"Search 5.4M distributed generation installations","description":"Filter behind-the-meter and community-scale solar/storage installations from 16 state programs. Useful for residential pipeline analysis, market sizing, or DG aggregator BD.","operationId":"dg_projects_dg_projects_get","parameters":[{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by state (2-letter code)","title":"State"},"description":"Filter by state (2-letter code)"},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by type_std (Solar, Storage, Wind, etc.)","title":"Type"},"description":"Filter by type_std (Solar, Storage, Wind, etc.)"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status_std","title":"Status"},"description":"Filter by status_std"},{"name":"installer","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by installer (partial match)","title":"Installer"},"description":"Filter by installer (partial match)"},{"name":"utility","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by utility (partial match)","title":"Utility"},"description":"Filter by utility (partial match)"},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by data source","title":"Source"},"description":"Filter by data source"},{"name":"capacity_min","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Min capacity in kW","title":"Capacity Min"},"description":"Min capacity in kW"},{"name":"capacity_max","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Max capacity in kW","title":"Capacity Max"},"description":"Max capacity in kW"},{"name":"size_class","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by size class (residential, small_commercial, commercial, community_solar, utility_scale)","title":"Size Class"},"description":"Filter by size class (residential, small_commercial, commercial, community_solar, utility_scale)"},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2},{"type":"null"}],"description":"Search name or developer","title":"Q"},"description":"Search name or developer"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":[{"id":9912345,"state":"MA","program":"ma_smart","system_kw":12.5,"install_date":"2024-04-12","developer":"Sunrun","battery_kw":5.0,"battery_kwh":13.5}],"meta":{"total":5421000,"page":1,"per_page":50}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dg/stats":{"get":{"tags":["DG"],"summary":"DG aggregate statistics","description":"State-by-state DG totals, plus installer and program breakdowns.","operationId":"dg_stats_dg_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"total_installations":5421000,"total_kw":78400000,"by_state":[{"state":"CA","count":1840000,"total_kw":24300000},{"state":"NY","count":412000,"total_kw":4120000}],"by_program":[{"program":"lbnl_tts","count":3609157}]}}}}}}},"/dg/stats/refresh":{"post":{"tags":["DG"],"summary":"Trigger DG stats cache refresh (admin)","description":"Forces recomputation of /dg/stats aggregates. Admin only.","operationId":"dg_stats_refresh_dg_stats_refresh_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"refreshed":true,"duration_ms":4120}}}}}}},"/dg/investable":{"get":{"tags":["DG"],"summary":"Pre-screened investable DG projects","description":"55K+ DG projects scored for investability based on stage, system size, location, and program.","operationId":"dg_investable_dg_investable_get","parameters":[{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by state (2-letter code)","title":"State"},"description":"Filter by state (2-letter code)"},{"name":"dg_stage","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by stage (approved, construction, inspection)","title":"Dg Stage"},"description":"Filter by stage (approved, construction, inspection)"},{"name":"size_class","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by size class (residential, small_commercial, commercial, community_solar, utility_scale)","title":"Size Class"},"description":"Filter by size class (residential, small_commercial, commercial, community_solar, utility_scale)"},{"name":"min_score","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum investability score","title":"Min Score"},"description":"Minimum investability score"},{"name":"min_capacity_kw","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Min capacity in kW","title":"Min Capacity Kw"},"description":"Min capacity in kW"},{"name":"max_capacity_kw","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Max capacity in kW","title":"Max Capacity Kw"},"description":"Max capacity in kW"},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by data source","title":"Source"},"description":"Filter by data source"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":[{"id":9912345,"state":"MA","system_kw":250.0,"investability_score":72,"grade":"B+","estimated_credit_value_usd":87500}],"meta":{"total":55412,"page":1,"per_page":50}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dg/investable/summary":{"get":{"tags":["DG"],"summary":"Aggregate investable DG statistics","description":"Capacity totals and score distribution across the 55K scored DG projects.","operationId":"dg_investable_summary_dg_investable_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"total_investable_dg":55412,"total_kw":1240000,"by_grade":[{"grade":"A","count":4120},{"grade":"B+","count":8790}]}}}}}}},"/grid/turbines":{"get":{"tags":["Grid"],"summary":"Search 75K US wind turbines (USWTDB)","description":"Turbine-level metadata from the USGS Wind Turbine Database — manufacturer, model, capacity, year, lat/lon.","operationId":"grid_turbines_grid_turbines_get","parameters":[{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by state (2-letter code)","title":"State"},"description":"Filter by state (2-letter code)"},{"name":"manufacturer","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by manufacturer (partial match)","title":"Manufacturer"},"description":"Filter by manufacturer (partial match)"},{"name":"project_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by project name (partial match)","title":"Project Name"},"description":"Filter by project name (partial match)"},{"name":"year_min","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Min project year","title":"Year Min"},"description":"Min project year"},{"name":"year_max","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Max project year","title":"Year Max"},"description":"Max project year"},{"name":"capacity_min","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Min turbine capacity in kW","title":"Capacity Min"},"description":"Min turbine capacity in kW"},{"name":"capacity_max","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Max turbine capacity in kW","title":"Capacity Max"},"description":"Max turbine capacity in kW"},{"name":"eia_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by EIA plant ID","title":"Eia Id"},"description":"Filter by EIA plant ID"},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2},{"type":"null"}],"description":"Search project name or manufacturer","title":"Q"},"description":"Search project name or manufacturer"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":[{"id":3045123,"manufacturer":"GE","model":"1.5sle","capacity_kw":1500,"year_installed":2010,"state":"TX","lat":32.481,"lon":-101.092}],"meta":{"total":75000,"page":1,"per_page":50}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/grid/transmission":{"get":{"tags":["Grid"],"summary":"Search 95K+ transmission lines (HIFLD)","description":"Transmission line metadata — owner, voltage, status, AC/DC.","operationId":"grid_transmission_grid_transmission_get","parameters":[{"name":"owner","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by owner (partial match)","title":"Owner"},"description":"Filter by owner (partial match)"},{"name":"voltage_min","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Min voltage in kV","title":"Voltage Min"},"description":"Min voltage in kV"},{"name":"voltage_max","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Max voltage in kV","title":"Voltage Max"},"description":"Max voltage in kV"},{"name":"voltage_class","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by voltage class","title":"Voltage Class"},"description":"Filter by voltage class"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status","title":"Status"},"description":"Filter by status"},{"name":"substation","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by substation name (either endpoint, partial match)","title":"Substation"},"description":"Filter by substation name (either endpoint, partial match)"},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2},{"type":"null"}],"description":"Search owner or substations","title":"Q"},"description":"Search owner or substations"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":[{"id":198213,"owner":"AEP","voltage_kv":765,"status":"in_service","type":"AC","length_km":184.0}],"meta":{"total":95412,"page":1,"per_page":50}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/grid/substations":{"get":{"tags":["Grid"],"summary":"Search 64K electrical substations (HIFLD)","description":"Substation metadata — name, voltage class, status.","operationId":"grid_substations_grid_substations_get","parameters":[{"name":"name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by substation name (partial match)","title":"Name"},"description":"Filter by substation name (partial match)"},{"name":"voltage_min","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Min voltage in kV","title":"Voltage Min"},"description":"Min voltage in kV"},{"name":"voltage_max","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Max voltage in kV","title":"Voltage Max"},"description":"Max voltage in kV"},{"name":"owner","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by owner (partial match)","title":"Owner"},"description":"Filter by owner (partial match)"},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2},{"type":"null"}],"description":"Search name or owners","title":"Q"},"description":"Search name or owners"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":[{"id":412009,"name":"Sweetwater Sub","voltage_kv":345,"state":"TX","lat":32.47,"lon":-100.405}],"meta":{"total":64312,"page":1,"per_page":50}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/datacenters":{"get":{"tags":["Data Centers"],"summary":"List & filter data center facilities","description":"7,452 data center facilities across the US. Filter by state, market, operator, facility type (hyperscale/colocation/edge/crypto), and status.","operationId":"list_datacenters_datacenters_get","parameters":[{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by state (2-letter code)","title":"State"},"description":"Filter by state (2-letter code)"},{"name":"operator","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by operator (partial match)","title":"Operator"},"description":"Filter by operator (partial match)"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status","title":"Status"},"description":"Filter by status"},{"name":"facility_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by facility type","title":"Facility Type"},"description":"Filter by facility type"},{"name":"market","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by market","title":"Market"},"description":"Filter by market"},{"name":"min_mw","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Min capacity in MW","title":"Min Mw"},"description":"Min capacity in MW"},{"name":"max_mw","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Max capacity in MW","title":"Max Mw"},"description":"Max capacity in MW"},{"name":"energy_community","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by energy community eligibility","title":"Energy Community"},"description":"Filter by energy community eligibility"},{"name":"grid_region","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by ISO/RTO region","title":"Grid Region"},"description":"Filter by ISO/RTO region"},{"name":"is_canonical","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Only show deduplicated records","default":true,"title":"Is Canonical"},"description":"Only show deduplicated records"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Per Page"}},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Column to sort by","default":"capacity_mw","title":"Sort By"},"description":"Column to sort by"},{"name":"sort_dir","in":"query","required":false,"schema":{"type":"string","description":"Sort direction (asc or desc)","default":"desc","title":"Sort Dir"},"description":"Sort direction (asc or desc)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":[{"dc_id":"BAX-1234","name":"Ashburn Campus 7","operator":"Equinix","state":"VA","market":"Northern Virginia","facility_type":"hyperscale","status":"operational","capacity_mw":240.0}],"meta":{"total":7452,"page":1,"per_page":50}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/datacenters/summary":{"get":{"tags":["Data Centers"],"summary":"Aggregate data center pipeline statistics","description":"State, operator, market, facility-type, and IRA-eligibility breakdowns. Cached 5 min.","operationId":"datacenters_summary_datacenters_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"total_facilities":7452,"total_capacity_mw":747743.1,"by_state":[{"state":"TX","count":964,"total_mw":143065.0,"avg_rate":226.7},{"state":"VA","count":1333,"total_mw":76881.1,"avg_rate":122.0}],"by_operator":[{"operator":"Lumen Technologies","count":225,"total_mw":45724.1},{"operator":"CleanSpark","count":32,"total_mw":18850.0}]}}}}}}},"/datacenters/markets":{"get":{"tags":["Data Centers"],"summary":"Market-level data center analysis","description":"Aggregates by industry-defined market (Northern Virginia, Dallas-Fort Worth, etc.). Pipeline counts include planned + proposed.","operationId":"datacenters_markets_datacenters_markets_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"markets":[{"market":"Northern Virginia","operational_count":415,"pipeline_count":120,"operational_mw":2137.0}]}}}}}}},"/datacenters/operators":{"get":{"tags":["Data Centers"],"summary":"Operator portfolio analysis","description":"Per-operator state spread, total capacity, and facility-type mix.","operationId":"datacenters_operators_datacenters_operators_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"operators":[{"operator":"Equinix","facilities":199,"total_mw":45213.0,"states":["MA","NY","CA","GA","PA","TX","VA","WA","IL","DC","CO","FL","NJ"]}]}}}}}}},"/datacenters/pipeline":{"get":{"tags":["Data Centers"],"summary":"Proposed and planned data centers","description":"Only the forward-looking pipeline — proposed, planned, under_construction, expanding.","operationId":"datacenters_pipeline_datacenters_pipeline_get","parameters":[{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by state (2-letter code)","title":"State"},"description":"Filter by state (2-letter code)"},{"name":"operator","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by operator (partial match)","title":"Operator"},"description":"Filter by operator (partial match)"},{"name":"facility_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by facility type","title":"Facility Type"},"description":"Filter by facility type"},{"name":"market","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by market","title":"Market"},"description":"Filter by market"},{"name":"min_mw","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Min capacity in MW","title":"Min Mw"},"description":"Min capacity in MW"},{"name":"max_mw","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Max capacity in MW","title":"Max Mw"},"description":"Max capacity in MW"},{"name":"grid_region","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by ISO/RTO region","title":"Grid Region"},"description":"Filter by ISO/RTO region"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Per Page"}},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Column to sort by","default":"capacity_mw","title":"Sort By"},"description":"Column to sort by"},{"name":"sort_dir","in":"query","required":false,"schema":{"type":"string","description":"Sort direction (asc or desc)","default":"desc","title":"Sort Dir"},"description":"Sort direction (asc or desc)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"data":[{"dc_id":"FRC-2901","name":"Permian AI Campus","operator":"Fermi America and Texas Tech","state":"TX","status":"proposed","capacity_mw":11000.0}],"meta":{"total":1893,"page":1,"per_page":50}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/datacenters/grid-impact":{"get":{"tags":["Data Centers"],"summary":"Cross-reference data center load against queue capacity","description":"For each state and ISO, the operational + pipeline DC MW vs. queue capacity additions. Use to find tightest markets.","operationId":"datacenters_grid_impact_datacenters_grid_impact_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"rows":[{"state":"TX","iso":"ERCOT","dc_pipeline_mw":86000,"queue_additions_mw_5yr":240000,"tightness_ratio":0.36}]}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/datacenters/search":{"get":{"tags":["Data Centers"],"summary":"Full-text search across data center facilities","description":"Search by name, operator, location, or facility type.","operationId":"datacenters_search_datacenters_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search name, operator, address, city","title":"Q"},"description":"Search name, operator, address, city"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"query":"ashburn","results":[{"dc_id":"BAX-1234","name":"Ashburn Campus 7","operator":"Equinix"}]}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/datacenters/{dc_id}":{"get":{"tags":["Data Centers"],"summary":"Full data center facility detail","description":"All available fields for a single facility, including substation tie-in if known.","operationId":"get_datacenter_datacenters__dc_id__get","parameters":[{"name":"dc_id","in":"path","required":true,"schema":{"type":"integer","title":"Dc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"dc_id":"BAX-1234","name":"Ashburn Campus 7","operator":"Equinix","state":"VA","city":"Ashburn","market":"Northern Virginia","facility_type":"hyperscale","status":"operational","capacity_mw":240.0,"lat":39.043,"lon":-77.487,"substation_tie_in":"Beaumeade 230kV","energy_community_eligible":false,"low_income_eligible":false}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/query":{"post":{"tags":["Export"],"summary":"Run a read-only SQL query against the master DB","description":"Enterprise only. Returns a list of rows. Statement timeout 30s, row limit 50K.","operationId":"run_query_query_post","parameters":[{"name":"database","in":"query","required":true,"schema":{"type":"string","description":"Database: master, dg, grid, ferc, corporate, eia, epa, nrel, market","title":"Database"},"description":"Database: master, dg, grid, ferc, corporate, eia, epa, nrel, market"},{"name":"sql","in":"query","required":true,"schema":{"type":"string","description":"SELECT query to execute","title":"Sql"},"description":"SELECT query to execute"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"columns":["state","fuel_type","capacity_mw"],"rows":[{"state":"TX","fuel_type":"Solar","capacity_mw":24300}],"row_count":1,"duration_ms":412}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/export/projects":{"get":{"tags":["Export"],"summary":"CSV export of projects — requires a plan with export","description":"Streams CSV with the same filter parameters as /projects. **Requires an API key on a tier that includes bulk export.** 401 if the key is missing, unknown or revoked; 402 if the key is valid but its tier does not include export — the free tier does not, at any row count. This gate is always on and does not depend on REQUIRE_API_KEY.","operationId":"export_projects_export_projects_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format (csv)","default":"csv","title":"Format"},"description":"Export format (csv)"},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"region","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region"}},{"name":"developer","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Developer"}},{"name":"capacity_min","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Capacity Min"}},{"name":"capacity_max","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Capacity Max"}},{"name":"energy_community","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Energy Community"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"description":"Max rows to export","default":50000,"title":"Limit"},"description":"Max rows to export"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":"id,region,state,developer,type,capacity_mw,queue_date,status\\nPJM-AE2-123,PJM,NJ,NextEra Energy Resources,Solar,150.0,2023-04-12,Active\\n..."}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/export/dg":{"get":{"tags":["Export"],"summary":"CSV export of DG installations — requires a plan with export","description":"Streams CSV of distributed generation installations. **Requires an API key on a tier that includes bulk export.** 401 if the key is missing, unknown or revoked; 402 if the key is valid but its tier does not include export. Same gate as /export/projects.","operationId":"export_dg_export_dg_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format (csv)","default":"csv","title":"Format"},"description":"Export format (csv)"},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"installer","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Installer"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"description":"Max rows to export","default":50000,"title":"Limit"},"description":"Max rows to export"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":"id,state,program,system_kw,install_date\\n9912345,MA,ma_smart,12.5,2024-04-12\\n..."}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/domestic-content/{queue_id}":{"get":{"tags":["Tax Credits"],"summary":"Check domestic-content ITC bonus eligibility","description":"Verifies whether a project qualifies for the +10% domestic-content adder under IRS Notice 2023-38.","operationId":"domestic_content_check_domestic_content__queue_id__get","parameters":[{"name":"queue_id","in":"path","required":true,"schema":{"type":"string","title":"Queue Id"}},{"name":"region","in":"query","required":false,"schema":{"type":"string","title":"Region"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"queue_id":"PJM-AE2-123","domestic_content_eligible":true,"method":"elective_safe_harbor","components_verified":["steel/iron 100%","manufactured products 45.7% adjusted"],"bonus_pct":0.1,"estimated_bonus_value_usd":6750000,"notes":"Project meets 40% adjusted percentage requirement for 2026 placed-in-service date."}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/keys":{"get":{"tags":["Admin"],"summary":"List all API keys (admin)","description":"Returns all keys with prefix, name, email, tier, usage. Requires `x-admin-secret` header.","operationId":"admin_list_keys_admin_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"keys":[{"key_prefix":"pk_R1jl5gD","name":"Owen","tier":"enterprise","request_count":23}]}}}}}},"post":{"tags":["Admin"],"summary":"Create an API key (admin)","description":"Creates a key with the given name, email, and tier. The raw key is returned only once.","operationId":"admin_create_key_admin_keys_post","parameters":[{"name":"name","in":"query","required":true,"schema":{"type":"string","description":"Key owner name","title":"Name"},"description":"Key owner name"},{"name":"email","in":"query","required":false,"schema":{"type":"string","description":"Owner email","default":"","title":"Email"},"description":"Owner email"},{"name":"tier","in":"query","required":false,"schema":{"type":"string","description":"Tier: free, pro, enterprise","default":"free","title":"Tier"},"description":"Tier: free, pro, enterprise"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"key":"pk_GLxhkCbE...","name":"Owen","tier":"enterprise","message":"Save this key — it cannot be retrieved later."}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/query-usage":{"get":{"tags":["Admin"],"summary":"Who is pulling bulk rows through /query (admin only)","description":"usage_log only records calls carrying a valid key, so the anonymous traffic that matters most on /query was invisible. Telemetry starts when this shipped: an empty result means no data, not no traffic. `truncation_warning` fires when a call hit the anonymous row cap, which is how a silently truncated audit-path query surfaces.","operationId":"admin_query_usage_admin_query_usage_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":30,"title":"Days"}},{"name":"min_rows","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Only count calls returning at least this many rows","default":1000,"title":"Min Rows"},"description":"Only count calls returning at least this many rows"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"days":30,"anon_row_cap":3000,"totals":{"calls":412,"rows_total":91204},"by_tier":[{"tier":"anonymous","calls":388,"rows_total":71204,"rows_max":3000,"times_capped":4}],"capped_call_count":4,"truncation_warning":"4 call(s) hit the 3,000-row cap. …"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/auth-backup":{"get":{"tags":["Admin"],"summary":"Freshness of the nightly auth.db backup (admin only)","description":"auth.db is the only customer state that cannot be rebuilt from an upstream source. `healthy` goes false once the newest backup is older than 48h — one missed run is tolerated, two is not. Returns 503 with healthy=false if the backup store cannot be read; never green on an error path. The destination is off-VOLUME, not off-site: same provider, same account.","operationId":"admin_auth_backup_status_admin_auth_backup_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"backups":14,"latest":{"backup_id":137,"taken_at":"2026-08-14T03:00:04+00:00","age_hours":6.2,"api_key_count":40,"usage_row_count":18442,"raw_bytes":622592,"gzip_bytes":77623},"healthy":true}}}}}}},"/admin/usage":{"get":{"tags":["Admin"],"summary":"Aggregate usage statistics (admin)","description":"Request counts, top endpoints, top keys over the given window.","operationId":"admin_usage_admin_usage_get","parameters":[{"name":"key_prefix","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by key prefix (first 10 chars)","title":"Key Prefix"},"description":"Filter by key prefix (first 10 chars)"},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":1,"default":7,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"total_requests":4120,"days":7,"by_endpoint":[{"endpoint":"/projects","count":1840,"avg_ms":142.0}],"by_day":[{"date":"2026-06-06","count":612}]}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/cache":{"get":{"tags":["Admin"],"summary":"Response cache stats (admin)","description":"Current cache size, active entries, and TTL config.","operationId":"admin_cache_stats_admin_cache_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"entries":28,"active":22,"ttls":{"/stats":300,"/deals/itc/summary":300}}}}}}}},"/admin/cache/clear":{"post":{"tags":["Admin"],"summary":"Clear response cache (admin)","description":"Wipes the in-memory response cache. Useful after pipeline updates.","operationId":"admin_cache_clear_admin_cache_clear_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"cleared":28}}}}}}},"/admin/upload-db":{"post":{"tags":["Admin"],"summary":"Upload a SQLite database file (admin)","description":"Uploads master.db / dg.db / etc. to the Railway volume. Multipart form.","operationId":"admin_upload_db_admin_upload_db_post","parameters":[{"name":"name","in":"query","required":true,"schema":{"type":"string","description":"Target database filename (e.g. master.db)","title":"Name"},"description":"Target database filename (e.g. master.db)"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_admin_upload_db_admin_upload_db_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"uploaded":"master.db","size_mb":184.2,"row_count":47787}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/migrate-db":{"post":{"tags":["Admin"],"summary":"Run database migrations (admin)","description":"Applies pending schema migrations.","operationId":"admin_migrate_db_admin_migrate_db_post","parameters":[{"name":"name","in":"query","required":true,"schema":{"type":"string","description":"Target database filename (e.g. dg.db)","title":"Name"},"description":"Target database filename (e.g. dg.db)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"applied":2,"migrations":["20260601_add_score_columns.sql","20260603_index_state.sql"]}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/bulk-update":{"post":{"tags":["Admin"],"summary":"Bulk update rows (admin)","description":"Apply field updates to many rows by query filter.","operationId":"admin_bulk_update_admin_bulk_update_post","parameters":[{"name":"name","in":"query","required":true,"schema":{"type":"string","description":"Target database filename (e.g. dg.db)","title":"Name"},"description":"Target database filename (e.g. dg.db)"},{"name":"table","in":"query","required":true,"schema":{"type":"string","description":"Table to update","title":"Table"},"description":"Table to update"},{"name":"key_column","in":"query","required":false,"schema":{"type":"string","description":"Column to match rows on","default":"id","title":"Key Column"},"description":"Column to match rows on"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"updated":412,"duration_ms":2100}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/bulk-insert":{"post":{"tags":["Admin"],"summary":"Bulk insert rows (admin)","description":"Insert many rows in one transaction.","operationId":"admin_bulk_insert_admin_bulk_insert_post","parameters":[{"name":"name","in":"query","required":true,"schema":{"type":"string","description":"Target database filename (e.g. dg.db)","title":"Name"},"description":"Target database filename (e.g. dg.db)"},{"name":"table","in":"query","required":true,"schema":{"type":"string","description":"Table to insert into","title":"Table"},"description":"Table to insert into"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"inserted":1200,"duration_ms":4320}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_admin_upload_db_admin_upload_db_post":{"properties":{"db":{"type":"string","format":"binary","title":"Db","description":"SQLite database file"}},"type":"object","required":["db"],"title":"Body_admin_upload_db_admin_upload_db_post"},"CheckoutRequest":{"properties":{"email":{"type":"string","title":"Email"},"tier":{"type":"string","title":"Tier"}},"type":"object","required":["email","tier"],"title":"CheckoutRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"PortalRequest":{"properties":{"email":{"type":"string","title":"Email"}},"type":"object","required":["email"],"title":"PortalRequest"},"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"}}},"tags":[{"name":"Projects","description":"Interconnection queue projects — 48,895 interconnection projects, 26,118 first-party (24,303 direct from ISO/RTO filings, 1,815 from state programs); the remainder reach us only via LBNL's annual file or a competitor's product. Live per-market breakdown at /catalog"},{"name":"Deals","description":"ITC deal sourcing and pre-qualified investment opportunities with scoring."},{"name":"Tax Credits","description":"ITC/PTC calculation with all IRA bonuses (energy community, low-income, domestic content)."},{"name":"Data Centers","description":"7,452 data center facilities — operators, markets, pipeline, and grid-impact cross-reference."},{"name":"Developers","description":"6,593 developer profiles with track records, tier classification, and capital posture."},{"name":"DG","description":"Distributed generation — 5.4M installations from 16 state programs."},{"name":"Market","description":"LMP pricing, capacity auction results, NREL ATB technology cost projections."},{"name":"Grid","description":"Wind turbines (USWTDB), substations, and transmission lines (HIFLD)."},{"name":"Reference","description":"EIA generators, EPA emissions, FERC financials, corporate ownership, permits."},{"name":"Auth","description":"API key registration and account info."},{"name":"Billing","description":"Stripe subscription billing: checkout, customer portal, webhook."},{"name":"Export","description":"CSV export and SQL query endpoints for bulk data access."},{"name":"System","description":"Health checks, pipeline monitoring, source freshness."},{"name":"Admin","description":"API key management, cache control, database uploads — gated by admin secret."}]}