{"openapi":"3.1.0","info":{"title":"EnergyNetWatch Public Data API","version":"2026-05-08","description":"Paywalled, API-key protected EnergyNetWatch oil and gas data API for approved application integrations and AI tool callers. Access can be scoped by dataset and use case, including operators, permits, wells, production, infrastructure records, source freshness, and coverage metadata. Responses should be interpreted with state coverage, source freshness, and partial-history caveats in mind."},"servers":[{"url":"https://api.energynetwatch.com","description":"EnergyNetWatch API"}],"security":[{"ApiKeyAuth":[]}],"tags":[{"name":"Health"},{"name":"Operators"},{"name":"Data Availability"},{"name":"Permits"},{"name":"Wells"},{"name":"Production"},{"name":"Infrastructure"}],"paths":{"/api/public/openapi.json":{"get":{"tags":["Health"],"summary":"Get the public API OpenAPI document","operationId":"getPublicOpenApi","security":[],"responses":{"200":{"description":"OpenAPI 3.1 document for the public API.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/public/health":{"get":{"tags":["Health"],"summary":"Check public API availability","operationId":"publicHealth","responses":{"200":{"description":"API health payload.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}},"400":{"description":"Invalid request parameters.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"API key is valid but lacks the required scope or is paused.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit or quota exceeded.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Unexpected server error.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/public/operators":{"get":{"tags":["Operators"],"summary":"List operator profiles","operationId":"listOperators","description":"Requires operators:read scope.","parameters":[{"name":"search","in":"query","required":false,"schema":{"type":"string","maxLength":100}},{"name":"county","in":"query","required":false,"schema":{"type":"string","maxLength":100},"description":"County name or county code filter."},{"name":"spuddedOnly","in":"query","required":false,"schema":{"type":"boolean"},"description":"When true, return only permits with a reported spud date and apply days to spud_date."},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1},"description":"Route-specific server cap applies."}],"responses":{"200":{"description":"Operator list payload.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OperatorListResponse"}}}},"400":{"description":"Invalid request parameters.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"API key is valid but lacks the required scope or is paused.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit or quota exceeded.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Unexpected server error.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/public/data-availability":{"get":{"tags":["Data Availability","Operators","Permits","Wells","Production"],"summary":"Search grouped data availability for an operator or company label","operationId":"dataAvailabilitySearch","description":"Requires operators:read scope. Returns grouped evidence across operator profiles, state mappings, drilling permits, wells, production rollups, and TX facility permits.","parameters":[{"name":"search","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":100},"description":"Company, operator, ticker, legal-name fragment, or likely variant spelling."},{"name":"state","in":"query","required":false,"schema":{"type":"string","default":"ALL"},"description":"State code such as TX or NM. Use ALL for all supported states where the endpoint allows it."},{"name":"includeCounty","in":"query","required":false,"schema":{"type":"boolean","default":false},"description":"When true, include grouped county-level permit, well, production, and TX facility evidence."}],"responses":{"200":{"description":"Grouped data availability payload.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericSuccessResponse"}}}},"400":{"description":"Invalid request parameters.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"API key is valid but lacks the required scope or is paused.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit or quota exceeded.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Unexpected server error.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/public/operators/{id}":{"get":{"tags":["Operators"],"summary":"Get operator profile detail","operationId":"getOperator","description":"Requires operators:read scope.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Operator detail payload.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OperatorDetailResponse"}}}},"400":{"description":"Invalid request parameters.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"API key is valid but lacks the required scope or is paused.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit or quota exceeded.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Unexpected server error.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/public/operators/{id}/production-summary":{"get":{"tags":["Operators","Production"],"summary":"Get operator production summary","operationId":"getOperatorProductionSummary","description":"Requires operators:read scope.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"state","in":"query","required":false,"schema":{"type":"string","default":"ALL"},"description":"State code such as TX or NM. Use ALL for all supported states where the endpoint allows it."},{"name":"months","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":120,"default":24}}],"responses":{"200":{"description":"Operator production summary payload.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericSuccessResponse"}}}},"400":{"description":"Invalid request parameters.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"API key is valid but lacks the required scope or is paused.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit or quota exceeded.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Unexpected server error.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/public/operators/{id}/permits-summary":{"get":{"tags":["Operators","Permits"],"summary":"Get operator permit activity summary","operationId":"getOperatorPermitsSummary","description":"Requires permits:read scope.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}},{"name":"state","in":"query","required":false,"schema":{"type":"string","default":"ALL"},"description":"State code such as TX or NM. Use ALL for all supported states where the endpoint allows it."}],"responses":{"200":{"description":"Operator permit summary payload.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericSuccessResponse"}}}},"400":{"description":"Invalid request parameters.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"API key is valid but lacks the required scope or is paused.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit or quota exceeded.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Unexpected server error.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/public/permits":{"get":{"tags":["Permits"],"summary":"List drilling permits","operationId":"listPermits","description":"Requires permits:read scope.","parameters":[{"name":"state","in":"query","required":false,"schema":{"type":"string","default":"ALL"},"description":"State code such as TX or NM. Use ALL for all supported states where the endpoint allows it."},{"name":"days","in":"query","required":false,"schema":{"oneOf":[{"type":"integer","minimum":1},{"type":"string","enum":["all"]}]},"description":"Recent lookback window in days, or all."},{"name":"search","in":"query","required":false,"schema":{"type":"string","maxLength":100}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1},"description":"Route-specific server cap applies."}],"responses":{"200":{"description":"Permit list payload.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericSuccessResponse"}}}},"400":{"description":"Invalid request parameters.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"API key is valid but lacks the required scope or is paused.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit or quota exceeded.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Unexpected server error.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/public/permits/top-operators":{"get":{"tags":["Permits"],"summary":"Rank operators by permit count","operationId":"getTopPermitOperators","description":"Requires permits:read scope.","parameters":[{"name":"state","in":"query","required":false,"schema":{"type":"string","default":"ALL"},"description":"State code such as TX or NM. Use ALL for all supported states where the endpoint allows it."},{"name":"year","in":"query","required":false,"schema":{"type":"integer","minimum":1900,"maximum":2100}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50,"default":10}}],"responses":{"200":{"description":"Top permit operators payload.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericSuccessResponse"}}}},"400":{"description":"Invalid request parameters.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"API key is valid but lacks the required scope or is paused.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit or quota exceeded.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Unexpected server error.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/public/permits/operator-growth":{"get":{"tags":["Permits"],"summary":"Rank operators by recent permit growth","operationId":"getPermitGrowthOperators","description":"Requires permits:read scope. Compares each operator current permit count over a lookback window with the immediately preceding equal-length window.","parameters":[{"name":"state","in":"query","required":false,"schema":{"type":"string","default":"ALL"},"description":"State code such as TX or NM. Use ALL for all supported states where the endpoint allows it."},{"name":"days","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":365,"default":30}},{"name":"minGrowthPct","in":"query","required":false,"schema":{"type":"number","minimum":0,"default":10}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50,"default":10}}],"responses":{"200":{"description":"Permit operator growth payload.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericSuccessResponse"}}}},"400":{"description":"Invalid request parameters.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"API key is valid but lacks the required scope or is paused.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit or quota exceeded.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Unexpected server error.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/public/facility-permits":{"get":{"tags":["Permits"],"summary":"List TX facility permits","operationId":"listFacilityPermits","description":"Requires permits:read scope. Returns TX facility filings such as tank batteries, compressors, separators, gas plants, heater treaters, dehydrators, pipelines, and storage.","parameters":[{"name":"state","in":"query","required":false,"schema":{"type":"string","enum":["TX"],"default":"TX"},"description":"Facility permits are currently available for TX only."},{"name":"facilityType","in":"query","required":false,"schema":{"type":"string","enum":["TANK_BATTERY","COMPRESSOR","SEPARATOR","GAS_PLANT","HEATER_TREATER","DEHYDRATOR","PIPELINE","STORAGE","OTHER"]}},{"name":"days","in":"query","required":false,"schema":{"oneOf":[{"type":"integer","minimum":1},{"type":"string","enum":["all"]}]},"description":"Recent lookback window in days, or all. Uses effective_date, received_date, then first_seen_date."},{"name":"search","in":"query","required":false,"schema":{"type":"string","maxLength":100},"description":"Matches operator name, facility name, or permit number."},{"name":"county","in":"query","required":false,"schema":{"type":"string","maxLength":100}},{"name":"status","in":"query","required":false,"schema":{"type":"string","maxLength":40}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1},"description":"Route-specific server cap applies."}],"responses":{"200":{"description":"Facility permit list payload.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericSuccessResponse"}}}},"400":{"description":"Invalid request parameters.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"API key is valid but lacks the required scope or is paused.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit or quota exceeded.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Unexpected server error.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/public/infrastructure/operator-leads":{"get":{"tags":["Infrastructure","Permits"],"summary":"Rank Texas operators by infrastructure lead signals","operationId":"getInfrastructureOperatorLeads","description":"Requires permits:read scope. Builds a Texas operator targeting list from recent drilling permit demand and TCEQ facility registration evidence.","parameters":[{"name":"state","in":"query","required":false,"schema":{"type":"string","enum":["TX"],"default":"TX"},"description":"Infrastructure operator leads currently support TX only."},{"name":"days","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":365,"default":90}},{"name":"minPermitCount","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":5},"description":"Minimum current-window drilling permit count. Operators with recent facility records can still qualify."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50,"default":10}}],"responses":{"200":{"description":"Infrastructure operator lead-list payload.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericSuccessResponse"}}}},"400":{"description":"Invalid request parameters.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"API key is valid but lacks the required scope or is paused.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit or quota exceeded.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Unexpected server error.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/public/wells":{"get":{"tags":["Wells"],"summary":"List wells","operationId":"listWells","description":"Requires wells:read scope.","parameters":[{"name":"state","in":"query","required":false,"schema":{"type":"string","default":"ALL"},"description":"State code such as TX or NM. Use ALL for all supported states where the endpoint allows it."},{"name":"search","in":"query","required":false,"schema":{"type":"string"}},{"name":"status","in":"query","required":false,"schema":{"type":"string"}},{"name":"wellType","in":"query","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1},"description":"Route-specific server cap applies."},{"name":"sortField","in":"query","required":false,"schema":{"type":"string","default":"latest_oil"}},{"name":"sortDirection","in":"query","required":false,"schema":{"type":"string","enum":["asc","desc"],"default":"desc"}}],"responses":{"200":{"description":"Well list payload.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WellListResponse"}}}},"400":{"description":"Invalid request parameters.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"API key is valid but lacks the required scope or is paused.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit or quota exceeded.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Unexpected server error.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/public/wells/{api}":{"get":{"tags":["Wells"],"summary":"Get well detail by API number","operationId":"getWell","description":"Requires wells:read scope.","parameters":[{"name":"api","in":"path","required":true,"schema":{"type":"string"}},{"name":"state","in":"query","required":false,"schema":{"type":"string","default":"ALL"},"description":"State code such as TX or NM. Use ALL for all supported states where the endpoint allows it."}],"responses":{"200":{"description":"Well detail payload.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericSuccessResponse"}}}},"400":{"description":"Invalid request parameters.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"API key is valid but lacks the required scope or is paused.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit or quota exceeded.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Unexpected server error.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/public/wells/{api}/production":{"get":{"tags":["Wells","Production"],"summary":"Get monthly production for a well","operationId":"getWellProduction","description":"Requires wells:read scope.","parameters":[{"name":"api","in":"path","required":true,"schema":{"type":"string"}},{"name":"state","in":"query","required":false,"schema":{"type":"string","default":"ALL"},"description":"State code such as TX or NM. Use ALL for all supported states where the endpoint allows it."},{"name":"start","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"end","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":120,"default":24}}],"responses":{"200":{"description":"Well production payload.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericSuccessResponse"}}}},"400":{"description":"Invalid request parameters.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"API key is valid but lacks the required scope or is paused.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit or quota exceeded.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Unexpected server error.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/public/production/latest-month":{"get":{"tags":["Production"],"summary":"Get latest complete production month","operationId":"getLatestProductionMonth","description":"Requires wells:read scope.","parameters":[{"name":"state","in":"query","required":false,"schema":{"type":"string","default":"ALL"},"description":"State code such as TX or NM. Use ALL for all supported states where the endpoint allows it."}],"responses":{"200":{"description":"Latest production month payload.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericSuccessResponse"}}}},"400":{"description":"Invalid request parameters.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"API key is valid but lacks the required scope or is paused.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit or quota exceeded.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Unexpected server error.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current route window."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current route window."},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the current route window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}},"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key"}},"schemas":{"ErrorResponse":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"message":{"type":"string"}}},"PublicMeta":{"type":"object","properties":{"apiVersion":{"type":"string"},"generatedAt":{"type":"string","format":"date-time"},"request":{"type":"object","additionalProperties":true},"freshness":{"type":"object","additionalProperties":true},"coverage":{"type":"object","additionalProperties":true}}},"HealthResponse":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","const":true},"data":{"type":"object","properties":{"ok":{"type":"boolean"},"service":{"type":"string"},"now":{"type":"string","format":"date-time"},"meta":{"$ref":"#/components/schemas/PublicMeta"}}}}},"GenericSuccessResponse":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","const":true},"data":{"type":"object","additionalProperties":true}}},"OperatorListResponse":{"allOf":[{"$ref":"#/components/schemas/GenericSuccessResponse"}]},"OperatorDetailResponse":{"allOf":[{"$ref":"#/components/schemas/GenericSuccessResponse"}]},"WellListResponse":{"allOf":[{"$ref":"#/components/schemas/GenericSuccessResponse"}]}}}}