{"openapi":"3.1.0","info":{"title":"EnsemblAI Data API","description":"API for querying PyPI package metadata, download metrics, and analytics.","version":"1.0"},"paths":{"/v1/health":{"get":{"summary":"Health check","description":"Simple health check endpoint","operationId":"health_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/status":{"get":{"summary":"System status","description":"Detailed system status with data freshness info","operationId":"status_v1_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/packages":{"get":{"summary":"Search packages","description":"Search and filter packages with pagination","operationId":"packages_search_v1_packages_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Full-text search across name, summary, tags, description","title":"Q"},"description":"Full-text search across name, summary, tags, description"},{"name":"use_case_tags","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by use case tag (contains match)","title":"Use Case Tags"},"description":"Filter by use case tag (contains match)"},{"name":"industry_domain","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by industry domain","title":"Industry Domain"},"description":"Filter by industry domain"},{"name":"technology_category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by technology category","title":"Technology Category"},"description":"Filter by technology category"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status","title":"Status"},"description":"Filter by status"},{"name":"license","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by license","title":"License"},"description":"Filter by license"},{"name":"corporate_owner","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by corporate owner (supports * wildcard)","title":"Corporate Owner"},"description":"Filter by corporate owner (supports * wildcard)"},{"name":"ownership_confidence","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by ownership confidence level","title":"Ownership Confidence"},"description":"Filter by ownership confidence level"},{"name":"github_org","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by GitHub organization (supports * wildcard)","title":"Github Org"},"description":"Filter by GitHub organization (supports * wildcard)"},{"name":"integrates_with","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by integration (supports * wildcard)","title":"Integrates With"},"description":"Filter by integration (supports * wildcard)"},{"name":"github_org_verified","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by GitHub org verified status","title":"Github Org Verified"},"description":"Filter by GitHub org verified status"},{"name":"github_org_company","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by GitHub org company name","title":"Github Org Company"},"description":"Filter by GitHub org company name"},{"name":"github_primary_language","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by primary language","title":"Github Primary Language"},"description":"Filter by primary language"},{"name":"author","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by author","title":"Author"},"description":"Filter by author"},{"name":"author_email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by author email","title":"Author Email"},"description":"Filter by author email"},{"name":"maintainer","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by maintainer","title":"Maintainer"},"description":"Filter by maintainer"},{"name":"maintainer_email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by maintainer email","title":"Maintainer Email"},"description":"Filter by maintainer email"},{"name":"github_archived","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by archived status","title":"Github Archived"},"description":"Filter by archived status"},{"name":"github_is_fork","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by fork status","title":"Github Is Fork"},"description":"Filter by fork status"},{"name":"npm_scope","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"npm: filter by scope(s), comma-separated, case-insensitive (e.g. @aws-sdk,@types). NULL npm_scope on pypi rows means this matches nothing outside npm.","title":"Npm Scope"},"description":"npm: filter by scope(s), comma-separated, case-insensitive (e.g. @aws-sdk,@types). NULL npm_scope on pypi rows means this matches nothing outside npm."},{"name":"npm_keyword","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"npm: filter by package.json keyword(s), comma-separated, any-of match","title":"Npm Keyword"},"description":"npm: filter by package.json keyword(s), comma-separated, any-of match"},{"name":"npm_deprecated","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"npm: true = only packages whose latest version is deprecated; false = exclude them","title":"Npm Deprecated"},"description":"npm: true = only packages whose latest version is deprecated; false = exclude them"},{"name":"npm_has_install_script","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"npm: true = latest version declares an install script","title":"Npm Has Install Script"},"description":"npm: true = latest version declares an install script"},{"name":"min_stars","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"Minimum GitHub stars","title":"Min Stars"},"description":"Minimum GitHub stars"},{"name":"max_stars","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"Maximum GitHub stars","title":"Max Stars"},"description":"Maximum GitHub stars"},{"name":"min_forks","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"Minimum GitHub forks","title":"Min Forks"},"description":"Minimum GitHub forks"},{"name":"max_forks","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"Maximum GitHub forks","title":"Max Forks"},"description":"Maximum GitHub forks"},{"name":"min_contributors","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"Minimum contributors","title":"Min Contributors"},"description":"Minimum contributors"},{"name":"max_contributors","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"Maximum contributors","title":"Max Contributors"},"description":"Maximum contributors"},{"name":"min_open_issues","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"Minimum open issues","title":"Min Open Issues"},"description":"Minimum open issues"},{"name":"max_open_issues","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"Maximum open issues","title":"Max Open Issues"},"description":"Maximum open issues"},{"name":"min_quality_score","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":10.0,"minimum":0.0},{"type":"null"}],"description":"Minimum quality score","title":"Min Quality Score"},"description":"Minimum quality score"},{"name":"max_quality_score","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":10.0,"minimum":0.0},{"type":"null"}],"description":"Maximum quality score","title":"Max Quality Score"},"description":"Maximum quality score"},{"name":"min_contributor_concentration","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"description":"Min contributor concentration","title":"Min Contributor Concentration"},"description":"Min contributor concentration"},{"name":"max_contributor_concentration","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"description":"Max contributor concentration","title":"Max Contributor Concentration"},"description":"Max contributor concentration"},{"name":"min_python_percentage","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"description":"Minimum Python percentage","title":"Min Python Percentage"},"description":"Minimum Python percentage"},{"name":"max_python_percentage","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"description":"Maximum Python percentage","title":"Max Python Percentage"},"description":"Maximum Python percentage"},{"name":"max_days_since_push","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"Maximum days since last push","title":"Max Days Since Push"},"description":"Maximum days since last push"},{"name":"min_days_since_push","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"Minimum days since last push","title":"Min Days Since Push"},"description":"Minimum days since last push"},{"name":"created_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Created after date (YYYY-MM-DD)","title":"Created After"},"description":"Created after date (YYYY-MM-DD)"},{"name":"created_before","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Created before date (YYYY-MM-DD)","title":"Created Before"},"description":"Created before date (YYYY-MM-DD)"},{"name":"pushed_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pushed after date (YYYY-MM-DD)","title":"Pushed After"},"description":"Pushed after date (YYYY-MM-DD)"},{"name":"pushed_before","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pushed before date (YYYY-MM-DD)","title":"Pushed Before"},"description":"Pushed before date (YYYY-MM-DD)"},{"name":"country_grouping","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Country grouping for download metrics: ALL, US, ALL_EX_US","default":"ALL","title":"Country Grouping"},"description":"Country grouping for download metrics: ALL, US, ALL_EX_US"},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort field. github_stars/github_forks are coerced to total_downloads (inherited, gameable — see star-farm guard); available: total_downloads, ci_downloads, non_ci_downloads, ci_percentage, unique_countries, github_quality_score, github_pushed_at, package_name","default":"total_downloads","title":"Sort"},"description":"Sort field. github_stars/github_forks are coerced to total_downloads (inherited, gameable — see star-farm guard); available: total_downloads, ci_downloads, non_ci_downloads, ci_percentage, unique_countries, github_quality_score, github_pushed_at, package_name"},{"name":"order","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort order (asc/desc)","default":"desc","title":"Order"},"description":"Sort order (asc/desc)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Results per page","default":20,"title":"Limit"},"description":"Results per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination","default":0,"title":"Offset"},"description":"Offset for pagination"},{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/packages/suggest":{"get":{"summary":"Typeahead package suggestions","description":"Fast popularity-ranked package name suggestions for pickers","operationId":"packages_suggest_v1_packages_suggest_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":214},{"type":"null"}],"description":"Name fragment; empty returns the most-downloaded packages","title":"Q"},"description":"Name fragment; empty returns the most-downloaded packages"},{"name":"industry_domain","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional industry_domain filter","title":"Industry Domain"},"description":"Optional industry_domain filter"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":15,"title":"Limit"}},{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/packages/{package_name}":{"get":{"summary":"Get package details","description":"Get full details for a specific package","operationId":"get_package_v1_packages__package_name__get","parameters":[{"name":"package_name","in":"path","required":true,"schema":{"type":"string","title":"Package Name"}},{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/packages/{package_name}/dependencies":{"get":{"summary":"Get package dependencies","description":"(Dead surface) Stub — dependency data not yet available; returns empty list.","operationId":"package_dependencies_v1_packages__package_name__dependencies_get","parameters":[{"name":"package_name","in":"path","required":true,"schema":{"type":"string","title":"Package Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/packages/batch":{"post":{"summary":"Batch package lookup","description":"Get details for multiple packages in one request (max 100)","operationId":"batch_packages_v1_packages_batch_post","parameters":[{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchPackagesRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/packages/{package_name}/metrics":{"get":{"summary":"Package metrics","description":"Get download metrics time series for a package","operationId":"package_metrics_v1_packages__package_name__metrics_get","parameters":[{"name":"package_name","in":"path","required":true,"schema":{"type":"string","title":"Package Name"}},{"name":"granularity","in":"query","required":false,"schema":{"type":"string","pattern":"^(monthly|weekly)$","description":"Time granularity: 'monthly' (all tiers) or 'weekly' (Pro+ only)","default":"monthly","title":"Granularity"},"description":"Time granularity: 'monthly' (all tiers) or 'weekly' (Pro+ only)"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Start Date"},"description":"Start date (YYYY-MM-DD)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"End Date"},"description":"End date (YYYY-MM-DD)"},{"name":"country_grouping","in":"query","required":false,"schema":{"type":"string","pattern":"^(ALL|US|ALL_EX_US)$","description":"Country grouping","default":"ALL","title":"Country Grouping"},"description":"Country grouping"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated list of fields","title":"Fields"},"description":"Comma-separated list of fields"},{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/analytics/time-series":{"get":{"summary":"Analytics time series","description":"Get time series analytics for packages selected by name or filters","operationId":"analytics_time_series_v1_analytics_time_series_get","parameters":[{"name":"packages","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated package names (1-25). If not provided, use filters.","title":"Packages"},"description":"Comma-separated package names (1-25). If not provided, use filters."},{"name":"industry_domain","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by domain","title":"Industry Domain"},"description":"Filter by domain"},{"name":"technology_category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by category","title":"Technology Category"},"description":"Filter by category"},{"name":"corporate_owner","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by owner","title":"Corporate Owner"},"description":"Filter by owner"},{"name":"github_org","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by GitHub org","title":"Github Org"},"description":"Filter by GitHub org"},{"name":"integrates_with","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by integration","title":"Integrates With"},"description":"Filter by integration"},{"name":"use_case_tags","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by tag","title":"Use Case Tags"},"description":"Filter by tag"},{"name":"license","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by license","title":"License"},"description":"Filter by license"},{"name":"author","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by author","title":"Author"},"description":"Filter by author"},{"name":"github_org_company","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by org company","title":"Github Org Company"},"description":"Filter by org company"},{"name":"github_primary_language","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by language","title":"Github Primary Language"},"description":"Filter by language"},{"name":"min_quality_score","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":10.0,"minimum":0.0},{"type":"null"}],"description":"Min quality score","title":"Min Quality Score"},"description":"Min quality score"},{"name":"max_quality_score","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":10.0,"minimum":0.0},{"type":"null"}],"description":"Max quality score","title":"Max Quality Score"},"description":"Max quality score"},{"name":"min_python_percentage","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"description":"Min Python %","title":"Min Python Percentage"},"description":"Min Python %"},{"name":"max_python_percentage","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"description":"Max Python %","title":"Max Python Percentage"},"description":"Max Python %"},{"name":"top","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Top N packages to select","default":10,"title":"Top"},"description":"Top N packages to select"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort by: total_downloads, github_stars, github_quality_score","default":"total_downloads","title":"Sort By"},"description":"Sort by: total_downloads, github_stars, github_quality_score"},{"name":"ranking_period","in":"query","required":false,"schema":{"type":"string","description":"Period for ranking: 30d, 90d, 365d","default":"30d","title":"Ranking Period"},"description":"Period for ranking: 30d, 90d, 365d"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date for time series","title":"Start Date"},"description":"Start date for time series"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date for time series","title":"End Date"},"description":"End date for time series"},{"name":"country_grouping","in":"query","required":false,"schema":{"type":"string","description":"Country grouping: ALL, US, ALL_EX_US","default":"ALL","title":"Country Grouping"},"description":"Country grouping: ALL, US, ALL_EX_US"},{"name":"breakdown","in":"query","required":false,"schema":{"type":"string","description":"Breakdown type: none, ci, os, arch, etc.","default":"none","title":"Breakdown"},"description":"Breakdown type: none, ci, os, arch, etc."},{"name":"metrics","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Custom metrics list","title":"Metrics"},"description":"Custom metrics list"},{"name":"granularity","in":"query","required":false,"schema":{"type":"string","pattern":"^(monthly|weekly)$","description":"Time granularity: 'monthly' (all tiers) or 'weekly' (Pro+ only). PG path only.","default":"monthly","title":"Granularity"},"description":"Time granularity: 'monthly' (all tiers) or 'weekly' (Pro+ only). PG path only."},{"name":"aggregates","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Aggregate series alongside `packages`. Comma-separated, each item either `total` or `<kind>:<value>` where kind ∈ domain|category|owner|tag. For tag, '+' unions multiple tags. Example: 'total,domain:AI/ML,owner:Google,tag:ai-agents+mcp-server'.","title":"Aggregates"},"description":"Aggregate series alongside `packages`. Comma-separated, each item either `total` or `<kind>:<value>` where kind ∈ domain|category|owner|tag. For tag, '+' unions multiple tags. Example: 'total,domain:AI/ML,owner:Google,tag:ai-agents+mcp-server'."},{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/leaderboards/downloads":{"get":{"summary":"Download leaderboard","description":"Get top packages by downloads","operationId":"leaderboard_downloads_v1_leaderboards_downloads_get","parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","description":"Period: 30d, 90d, 365d","default":"30d","title":"Period"},"description":"Period: 30d, 90d, 365d"},{"name":"industry_domain","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by domain","title":"Industry Domain"},"description":"Filter by domain"},{"name":"technology_category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by category","title":"Technology Category"},"description":"Filter by category"},{"name":"country_grouping","in":"query","required":false,"schema":{"type":"string","description":"Country grouping","default":"ALL","title":"Country Grouping"},"description":"Country grouping"},{"name":"corporate_owner","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by owner","title":"Corporate Owner"},"description":"Filter by owner"},{"name":"github_org","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by GitHub org","title":"Github Org"},"description":"Filter by GitHub org"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of results","default":100,"title":"Limit"},"description":"Number of results"},{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/companies":{"get":{"summary":"List companies","description":"List companies with aggregated downloads, ranked by total downloads","operationId":"list_companies_v1_companies_get","parameters":[{"name":"industry_domain","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by domain","title":"Industry Domain"},"description":"Filter by domain"},{"name":"ownership_confidence","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by confidence","title":"Ownership Confidence"},"description":"Filter by confidence"},{"name":"verified_only","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to only verified companies: true/false","title":"Verified Only"},"description":"Filter to only verified companies: true/false"},{"name":"is_official","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to only packages with 'official' in summary: true/false","title":"Is Official"},"description":"Filter to only packages with 'official' in summary: true/false"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date for downloads (YYYY-MM-DD)","title":"Start Date"},"description":"Start date for downloads (YYYY-MM-DD)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date for downloads (YYYY-MM-DD)","title":"End Date"},"description":"End date for downloads (YYYY-MM-DD)"},{"name":"period","in":"query","required":false,"schema":{"type":"string","description":"Period if no dates: 30d, 90d, 365d","default":"30d","title":"Period"},"description":"Period if no dates: 30d, 90d, 365d"},{"name":"min_packages","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Minimum package count","default":1,"title":"Min Packages"},"description":"Minimum package count"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Results per page","default":100,"title":"Limit"},"description":"Results per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination","default":0,"title":"Offset"},"description":"Offset for pagination"},{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/companies/{company_name}/stats":{"get":{"summary":"Company statistics","description":"Get detailed statistics for a company","operationId":"company_stats_v1_companies__company_name__stats_get","parameters":[{"name":"company_name","in":"path","required":true,"schema":{"type":"string","title":"Company Name"}},{"name":"months","in":"query","required":false,"schema":{"type":"integer","maximum":24,"minimum":1,"description":"Months for stats","default":3,"title":"Months"},"description":"Months for stats"},{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reference/domains":{"get":{"summary":"List industry domains","description":"Get all distinct industry domain values","operationId":"reference_domains_v1_reference_domains_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/reference/categories":{"get":{"summary":"List technology categories","description":"Get all distinct technology category values","operationId":"reference_categories_v1_reference_categories_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/reference/licenses":{"get":{"summary":"List licenses","description":"Get all distinct license values","operationId":"reference_licenses_v1_reference_licenses_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/reference/languages":{"get":{"summary":"List primary languages","description":"Get all distinct GitHub primary language values","operationId":"reference_languages_v1_reference_languages_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/reference/owners":{"get":{"summary":"List corporate owners","description":"Get all distinct corporate owner values","operationId":"reference_owners_v1_reference_owners_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/reference/countries":{"get":{"summary":"List countries","description":"Get all country reference data","operationId":"reference_countries_v1_reference_countries_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/analytics/growth":{"get":{"summary":"Growth analytics","description":"Calculate growth rates for packages","operationId":"analytics_growth_v1_analytics_growth_get","parameters":[{"name":"packages","in":"query","required":true,"schema":{"type":"string","description":"Comma-separated package names (max 25)","title":"Packages"},"description":"Comma-separated package names (max 25)"},{"name":"period","in":"query","required":false,"schema":{"type":"string","description":"Growth period: mom (month-over-month), qoq (quarter), yoy (year)","default":"mom","title":"Period"},"description":"Growth period: mom (month-over-month), qoq (quarter), yoy (year)"},{"name":"country_grouping","in":"query","required":false,"schema":{"type":"string","description":"Country grouping: ALL, US, ALL_EX_US","default":"ALL","title":"Country Grouping"},"description":"Country grouping: ALL, US, ALL_EX_US"},{"name":"metric","in":"query","required":false,"schema":{"type":"string","description":"Metric to calculate growth for","default":"total_downloads","title":"Metric"},"description":"Metric to calculate growth for"},{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/companies/{company_name}/packages":{"get":{"summary":"Company packages","description":"List all packages owned by a company","operationId":"company_packages_v1_companies__company_name__packages_get","parameters":[{"name":"company_name","in":"path","required":true,"schema":{"type":"string","title":"Company Name"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","description":"Sort field","default":"total_downloads","title":"Sort"},"description":"Sort field"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order (asc/desc)","default":"desc","title":"Order"},"description":"Sort order (asc/desc)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Results per page","default":50,"title":"Limit"},"description":"Results per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination offset","default":0,"title":"Offset"},"description":"Pagination offset"},{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/exports/packages":{"post":{"summary":"Export packages","description":"Export package data to CSV or JSON format. Dashboard calls (via X-Impersonate-Customer) are gated only by the tier's exports.csv.* caps; direct-API calls also require api.access (Pro+).","operationId":"export_packages_v1_exports_packages_post","parameters":[{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/watchlist":{"get":{"summary":"Get watchlist","description":"Get current user's watchlist","operationId":"get_watchlist_v1_watchlist_get","parameters":[{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Add to watchlist","description":"Add a package to the watchlist","operationId":"add_to_watchlist_v1_watchlist_post","parameters":[{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchlistAddRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/watchlist/{package_name}":{"delete":{"summary":"Remove from watchlist","description":"Remove a package from the watchlist","operationId":"remove_from_watchlist_v1_watchlist__package_name__delete","parameters":[{"name":"package_name","in":"path","required":true,"schema":{"type":"string","title":"Package Name"}},{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/ensembles":{"get":{"summary":"List ensembles","description":"List all user's saved ensembles","operationId":"list_ensembles_v1_ensembles_get","parameters":[{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Create ensemble","description":"Create a new package ensemble","operationId":"create_ensemble_v1_ensembles_post","parameters":[{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnsembleCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/ensembles/{ensemble_id}":{"get":{"summary":"Get ensemble","description":"Get details of a specific ensemble","operationId":"get_ensemble_v1_ensembles__ensemble_id__get","parameters":[{"name":"ensemble_id","in":"path","required":true,"schema":{"type":"string","title":"Ensemble Id"}},{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"summary":"Update ensemble","description":"Update an existing ensemble","operationId":"update_ensemble_v1_ensembles__ensemble_id__put","parameters":[{"name":"ensemble_id","in":"path","required":true,"schema":{"type":"string","title":"Ensemble Id"}},{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnsembleUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete ensemble","description":"Delete an ensemble","operationId":"delete_ensemble_v1_ensembles__ensemble_id__delete","parameters":[{"name":"ensemble_id","in":"path","required":true,"schema":{"type":"string","title":"Ensemble Id"}},{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/ensembles/{ensemble_id}/analytics":{"get":{"summary":"Ensemble analytics","description":"Get time series analytics for all packages in an ensemble","operationId":"ensemble_analytics_v1_ensembles__ensemble_id__analytics_get","parameters":[{"name":"ensemble_id","in":"path","required":true,"schema":{"type":"string","title":"Ensemble Id"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date","title":"Start Date"},"description":"Start date"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date","title":"End Date"},"description":"End date"},{"name":"country_grouping","in":"query","required":false,"schema":{"type":"string","description":"Country grouping","default":"ALL","title":"Country Grouping"},"description":"Country grouping"},{"name":"breakdown","in":"query","required":false,"schema":{"type":"string","description":"Breakdown type","default":"none","title":"Breakdown"},"description":"Breakdown type"},{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/analytics/geography":{"get":{"summary":"Geography breakdown","description":"Get geographic distribution of downloads for packages","operationId":"analytics_geography_v1_analytics_geography_get","parameters":[{"name":"packages","in":"query","required":true,"schema":{"type":"string","description":"Comma-separated package names (max 10)","title":"Packages"},"description":"Comma-separated package names (max 10)"},{"name":"period","in":"query","required":false,"schema":{"type":"string","description":"Period: 30d, 90d, 365d","default":"30d","title":"Period"},"description":"Period: 30d, 90d, 365d"},{"name":"top_countries","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"Top N countries","default":20,"title":"Top Countries"},"description":"Top N countries"},{"name":"region","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by region","title":"Region"},"description":"Filter by region"},{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/customer/notifications":{"get":{"summary":"List notifications","description":"In-app notifications for the authenticated customer. Most-recent first.","operationId":"list_notifications_v1_customer_notifications_get","parameters":[{"name":"unread_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Unread Only"}},{"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":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/customer/alerts":{"get":{"summary":"List alert rules","operationId":"list_alert_rules_v1_customer_alerts_get","parameters":[{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Create alert rule","operationId":"create_alert_rule_v1_customer_alerts_post","parameters":[{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertRuleCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/customer/alerts/{rule_id}":{"delete":{"summary":"Delete alert rule","operationId":"delete_alert_rule_v1_customer_alerts__rule_id__delete","parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}},{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/packages/{package_name}/cohort":{"get":{"summary":"Per-version monthly downloads (cohort heatmap)","description":"PG-fast when pre-aggregated by build_package_version_monthly worker; long-tail packages route to BQ at /v1/analytics/version-adoption.","operationId":"package_cohort_v1_packages__package_name__cohort_get","parameters":[{"name":"package_name","in":"path","required":true,"schema":{"type":"string","title":"Package Name"}},{"name":"months","in":"query","required":false,"schema":{"type":"integer","maximum":36,"minimum":3,"default":12,"title":"Months"}},{"name":"top_versions","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":3,"default":10,"title":"Top Versions"}},{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/ecosystem/clusters":{"get":{"summary":"Louvain ecosystem clusters","description":"Returns clusters of packages that share many dependencies, as a proxy for co-installation. Each cluster has a derived label (most common technology_category) and top members by within-cluster centrality.","operationId":"ecosystem_clusters_v1_ecosystem_clusters_get","parameters":[{"name":"min_size","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Drop clusters smaller than this","default":5,"title":"Min Size"},"description":"Drop clusters smaller than this"},{"name":"top_per_cluster","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"Top members per cluster by centrality","default":8,"title":"Top Per Cluster"},"description":"Top members per cluster by centrality"},{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/ecosystem":{"get":{"summary":"Ecosystem map by canonical domain","description":"Returns each industry_domain in config/taxonomy.yaml with package count, total downloads, top packages, and dominant technology categories. Populated from PG packages + package_monthly_stats.","operationId":"ecosystem_map_v1_ecosystem_get","parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","description":"Window for total_downloads: 30d / 90d / 365d","default":"30d","title":"Period"},"description":"Window for total_downloads: 30d / 90d / 365d"},{"name":"top_n","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"description":"Top packages per domain","default":5,"title":"Top N"},"description":"Top packages per domain"},{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/packages/{package_name}/depgraph":{"get":{"summary":"First/second-degree dependency graph","description":"Returns the package's direct dependencies (depth=1) or one further hop (depth=2). Parsed from PEP-508 requires_dist; environment markers and extras stripped.","operationId":"package_depgraph_v1_packages__package_name__depgraph_get","parameters":[{"name":"package_name","in":"path","required":true,"schema":{"type":"string","title":"Package Name"}},{"name":"depth","in":"query","required":false,"schema":{"type":"integer","maximum":2,"minimum":1,"description":"1 = direct deps; 2 = deps-of-deps too","default":1,"title":"Depth"},"description":"1 = direct deps; 2 = deps-of-deps too"},{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/customer/audit-deps":{"post":{"summary":"Audit dependency health + vulnerabilities","description":"Submit (package, version) entries from a requirements.txt / package.json / lockfile. Returns per-dependency health flags (deprecated, abandoned, declining, single-maintainer, install-script, not-found …) from EnsemblAI data plus OSV.dev vulnerability matches. Max 200 entries per request. ecosystem=pypi|npm.","operationId":"audit_deps_v1_customer_audit_deps_post","parameters":[{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditDepsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/customer/audit-deps/{vuln_id}":{"get":{"summary":"Get OSV vulnerability detail","description":"Fetch one vulnerability record from OSV.dev by ID (e.g. GHSA-xxxx-xxxx, PYSEC-xxxx)","operationId":"audit_deps_vuln_detail_v1_customer_audit_deps__vuln_id__get","parameters":[{"name":"vuln_id","in":"path","required":true,"schema":{"type":"string","title":"Vuln Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/customer/api-keys":{"get":{"summary":"List own API keys","description":"List API keys belonging to the authenticated customer (no full key value)","operationId":"list_api_keys_v1_customer_api_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Issue new API key","description":"Generate a new API key for the authenticated customer. The full key is returned ONCE in the response — store it immediately, it cannot be retrieved later.","operationId":"create_api_key_v1_customer_api_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/customer/api-keys/{api_key_id}":{"delete":{"summary":"Revoke API key","description":"Mark an API key as revoked. The key cannot be re-activated; issue a new one if needed.","operationId":"revoke_api_key_v1_customer_api_keys__api_key_id__delete","parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","title":"Api Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/customer/audit":{"get":{"summary":"List audit log entries","description":"Recent state-changing actions (writes) on the authenticated customer's resources","operationId":"list_audit_v1_customer_audit_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"action_prefix","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to actions starting with this prefix (e.g. 'api_key.')","title":"Action Prefix"},"description":"Filter to actions starting with this prefix (e.g. 'api_key.')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/saved-searches":{"get":{"summary":"List saved searches","description":"List all user's saved searches","operationId":"list_saved_searches_v1_saved_searches_get","parameters":[{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Create saved search","description":"Save a search configuration for reuse","operationId":"create_saved_search_v1_saved_searches_post","parameters":[{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedSearchCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/saved-searches/{search_id}":{"get":{"summary":"Get saved search","description":"Get a specific saved search","operationId":"get_saved_search_v1_saved_searches__search_id__get","parameters":[{"name":"search_id","in":"path","required":true,"schema":{"type":"string","title":"Search Id"}},{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"summary":"Update saved search","description":"Update an existing saved search","operationId":"update_saved_search_v1_saved_searches__search_id__put","parameters":[{"name":"search_id","in":"path","required":true,"schema":{"type":"string","title":"Search Id"}},{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedSearchUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete saved search","description":"Delete a saved search","operationId":"delete_saved_search_v1_saved_searches__search_id__delete","parameters":[{"name":"search_id","in":"path","required":true,"schema":{"type":"string","title":"Search Id"}},{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/saved-searches/{search_id}/execute":{"get":{"summary":"Execute saved search","description":"Run a saved search and return results","operationId":"execute_saved_search_v1_saved_searches__search_id__execute_get","parameters":[{"name":"search_id","in":"path","required":true,"schema":{"type":"string","title":"Search Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/packages/{package_name}/health":{"get":{"summary":"Package health scores","description":"Get computed health scores for a package","operationId":"package_health_scores_v1_packages__package_name__health_get","parameters":[{"name":"package_name","in":"path","required":true,"schema":{"type":"string","title":"Package Name"}},{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/packages/{package_name}/versions":{"get":{"summary":"List package versions","description":"Get all versions of a package with download statistics","operationId":"get_package_versions_v1_packages__package_name__versions_get","parameters":[{"name":"package_name","in":"path","required":true,"schema":{"type":"string","title":"Package Name"}},{"name":"period","in":"query","required":false,"schema":{"type":"string","description":"Time period: 30d, 90d, 180d, 365d","default":"30d","title":"Period"},"description":"Time period: 30d, 90d, 180d, 365d"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Maximum versions to return","default":20,"title":"Limit"},"description":"Maximum versions to return"},{"name":"sort","in":"query","required":false,"schema":{"type":"string","description":"Sort by: total_downloads, version, first_seen, last_seen","default":"total_downloads","title":"Sort"},"description":"Sort by: total_downloads, version, first_seen, last_seen"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc, desc","default":"desc","title":"Order"},"description":"Sort order: asc, desc"},{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/packages/{package_name}/versions/{version}/metrics":{"get":{"summary":"Version metrics time series","description":"Get download metrics time series for a specific package version","operationId":"get_version_metrics_v1_packages__package_name__versions__version__metrics_get","parameters":[{"name":"package_name","in":"path","required":true,"schema":{"type":"string","title":"Package Name"}},{"name":"version","in":"path","required":true,"schema":{"type":"string","title":"Version"}},{"name":"start_date","in":"query","required":true,"schema":{"type":"string","description":"Start date (YYYY-MM-DD) - required","title":"Start Date"},"description":"Start date (YYYY-MM-DD) - required"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD), defaults to today","title":"End Date"},"description":"End date (YYYY-MM-DD), defaults to today"},{"name":"granularity","in":"query","required":false,"schema":{"type":"string","description":"Granularity: daily, weekly, monthly","default":"daily","title":"Granularity"},"description":"Granularity: daily, weekly, monthly"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated metrics to include","title":"Fields"},"description":"Comma-separated metrics to include"},{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/analytics/version-adoption":{"get":{"summary":"Version adoption analysis","description":"Analyze version adoption patterns for a package","operationId":"analytics_version_adoption_v1_analytics_version_adoption_get","parameters":[{"name":"package","in":"query","required":true,"schema":{"type":"string","description":"Package name","title":"Package"},"description":"Package name"},{"name":"versions","in":"query","required":false,"schema":{"type":"string","description":"Versions to compare: 'top5', 'top10', or comma-separated list","default":"top5","title":"Versions"},"description":"Versions to compare: 'top5', 'top10', or comma-separated list"},{"name":"period","in":"query","required":false,"schema":{"type":"string","description":"Time period: 30d, 90d, 180d, 365d","default":"90d","title":"Period"},"description":"Time period: 30d, 90d, 180d, 365d"},{"name":"granularity","in":"query","required":false,"schema":{"type":"string","description":"Granularity: daily, weekly, monthly","default":"weekly","title":"Granularity"},"description":"Granularity: daily, weekly, monthly"},{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/filters/values":{"get":{"summary":"Get filter values with counts","description":"Get distinct values for a filter field with optional package counts","operationId":"get_filter_values_v1_filters_values_get","parameters":[{"name":"field","in":"query","required":true,"schema":{"type":"string","description":"Field: industry_domain, technology_category, use_case_tags, corporate_owner, license, github_primary_language, npm_scope, npm_keywords, npm_deprecated, npm_latest_has_install_script","title":"Field"},"description":"Field: industry_domain, technology_category, use_case_tags, corporate_owner, license, github_primary_language, npm_scope, npm_keywords, npm_deprecated, npm_latest_has_install_script"},{"name":"with_counts","in":"query","required":false,"schema":{"type":"boolean","description":"Include package counts","default":true,"title":"With Counts"},"description":"Include package counts"},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"description":"npm_scope only: prefix search ('aws' or '@aws') — returns the top 20 matching scopes by package count, reaching past the unqueried top-200 cap","title":"Q"},"description":"npm_scope only: prefix search ('aws' or '@aws') — returns the top 20 matching scopes by package count, reaching past the unqueried top-200 cap"},{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/organizations":{"get":{"summary":"List GitHub organizations","description":"List GitHub organizations with aggregated downloads","operationId":"list_organizations_v1_organizations_get","parameters":[{"name":"ownership_confidence","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by ownership confidence: High, Medium, Low","title":"Ownership Confidence"},"description":"Filter by ownership confidence: High, Medium, Low"},{"name":"verified_only","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to only GitHub verified organizations: true/false","title":"Verified Only"},"description":"Filter to only GitHub verified organizations: true/false"},{"name":"is_official","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to packages where summary contains 'official': true/false","title":"Is Official"},"description":"Filter to packages where summary contains 'official': true/false"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date for downloads (YYYY-MM-DD)","title":"Start Date"},"description":"Start date for downloads (YYYY-MM-DD)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date for downloads (YYYY-MM-DD)","title":"End Date"},"description":"End date for downloads (YYYY-MM-DD)"},{"name":"period","in":"query","required":false,"schema":{"type":"string","description":"Period if no dates: 30d, 90d, 365d","default":"30d","title":"Period"},"description":"Period if no dates: 30d, 90d, 365d"},{"name":"sort","in":"query","required":false,"schema":{"type":"string","description":"Sort field: downloads, package_count","default":"downloads","title":"Sort"},"description":"Sort field: downloads, package_count"},{"name":"min_packages","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Minimum package count per organization","default":1,"title":"Min Packages"},"description":"Minimum package count per organization"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Number of organizations to return","default":100,"title":"Limit"},"description":"Number of organizations to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination offset","default":0,"title":"Offset"},"description":"Pagination offset"},{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/organizations/{github_org}/packages":{"get":{"summary":"Get organization packages","description":"Get packages belonging to a GitHub organization or individual developer","operationId":"organization_packages_v1_organizations__github_org__packages_get","parameters":[{"name":"github_org","in":"path","required":true,"schema":{"type":"string","title":"Github Org"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date for downloads (YYYY-MM-DD)","title":"Start Date"},"description":"Start date for downloads (YYYY-MM-DD)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date for downloads (YYYY-MM-DD)","title":"End Date"},"description":"End date for downloads (YYYY-MM-DD)"},{"name":"period","in":"query","required":false,"schema":{"type":"string","description":"Period if no dates: 30d, 90d, 365d","default":"30d","title":"Period"},"description":"Period if no dates: 30d, 90d, 365d"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of packages to return","default":10,"title":"Limit"},"description":"Number of packages to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination offset","default":0,"title":"Offset"},"description":"Pagination offset"},{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","pattern":"^(pypi|npm)$","description":"Package ecosystem: 'pypi' (default) or 'npm'.","default":"pypi","title":"Ecosystem"},"description":"Package ecosystem: 'pypi' (default) or 'npm'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/me":{"get":{"summary":"Current key + tier introspection","description":"Returns the calling key's tier, customer info, rate limit, and history-cap so customers can self-diagnose without contacting support.","operationId":"me_v1_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/":{"get":{"summary":"API root","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"AlertRuleCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"package_name":{"type":"string","title":"Package Name"},"metric":{"type":"string","title":"Metric"},"operator":{"type":"string","title":"Operator"},"threshold":{"type":"number","title":"Threshold"},"delivery":{"type":"string","title":"Delivery","default":"in_app"},"delivery_target":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Delivery Target"},"enabled":{"type":"boolean","title":"Enabled","default":true}},"type":"object","required":["name","package_name","metric","operator","threshold"],"title":"AlertRuleCreate"},"ApiKeyCreateRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Friendly name for the key (e.g., 'CI server')"},"env":{"type":"string","title":"Env","description":"Key environment: 'live' or 'test'","default":"live"}},"type":"object","title":"ApiKeyCreateRequest"},"AuditDepsRequest":{"properties":{"requirements":{"items":{"$ref":"#/components/schemas/AuditDepsRequirement"},"type":"array","title":"Requirements"}},"type":"object","required":["requirements"],"title":"AuditDepsRequest"},"AuditDepsRequirement":{"properties":{"package":{"type":"string","title":"Package"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version"}},"type":"object","required":["package"],"title":"AuditDepsRequirement"},"BatchPackagesRequest":{"properties":{"packages":{"items":{"type":"string"},"type":"array","maxItems":100,"title":"Packages","description":"List of package names to fetch (max 100)"}},"type":"object","required":["packages"],"title":"BatchPackagesRequest"},"EnsembleCreateRequest":{"properties":{"name":{"type":"string","title":"Name","description":"Ensemble name"},"packages":{"items":{"type":"string"},"type":"array","maxItems":50,"title":"Packages","description":"List of package names"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Ensemble description"}},"type":"object","required":["name","packages"],"title":"EnsembleCreateRequest"},"EnsembleUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"New ensemble name"},"packages":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":50},{"type":"null"}],"title":"Packages","description":"Updated package list"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Updated description"}},"type":"object","title":"EnsembleUpdateRequest"},"ExportRequest":{"properties":{"format":{"type":"string","title":"Format","description":"Export format: csv or json","default":"csv"},"filters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Filters","description":"Search filters"},"fields":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Fields","description":"Fields to export"},"max_rows":{"type":"integer","maximum":250000.0,"minimum":1.0,"title":"Max Rows","description":"Requested max rows. Clamped DOWN to the tier's exports.csv.row_cap; 250000 is the absolute ceiling (matches the highest configured tier cap).","default":1000}},"type":"object","title":"ExportRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"SavedSearchCreateRequest":{"properties":{"name":{"type":"string","title":"Name","description":"Search name"},"filters":{"additionalProperties":true,"type":"object","title":"Filters","description":"Search filters"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Description"}},"type":"object","required":["name","filters"],"title":"SavedSearchCreateRequest"},"SavedSearchUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"New name"},"filters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Filters","description":"Updated filters"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Updated description"}},"type":"object","title":"SavedSearchUpdateRequest"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WatchlistAddRequest":{"properties":{"package_name":{"type":"string","title":"Package Name","description":"Package name to add to watchlist"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes","description":"Optional notes about the package"}},"type":"object","required":["package_name"],"title":"WatchlistAddRequest"}}}}