{"adoption": {"forks": 373, "observed_at": "2026-08-28T04:06:25.227918+00:00", "stars": 2196}, "canonical_url": "https://ross.abutalabs.com/products/api-umbrella", "card": {"archived": false, "artifact_type": "service", "description": "Open source API management platform", "domain": ["apis", "web-development", "backend", "developer-tools", "self-hosted"], "enriched": true, "function": ["api-gateway", "rate-limiting", "auth", "analytics", "routing", "proxy", "api-documentation", "http-server"], "health_score": 79, "homepage": null, "language": "Ruby", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["NatLabRockies/api-umbrella"], "name": "NatLabRockies/api-umbrella", "platform": ["self-hosted"], "pushed_at": "2026-08-17T17:52:29+00:00", "repo": "NatLabRockies/api-umbrella", "stars": 2196, "tags": ["api-management", "openresty", "nginx", "lua", "api-keys", "elasticsearch", "linux", "web-server", "docker"], "topics": ["api-management", "nginx", "openresty", "api-gateway", "api-manager", "luajit", "lua"], "urls": [], "use_cases": ["expose multiple backend APIs behind a single unified endpoint", "add API key authentication and rate limiting to existing APIs without code changes", "provide a self-service API key signup portal for public government or data APIs", "aggregate analytics and usage metrics across disparate APIs", "centralize API documentation for a multi-service API platform", "proxy and unify APIs written in different languages on different servers"], "what_it_is": "API Umbrella is an open source API management platform that sits as a layer above existing web service APIs. It standardizes access control, rate limiting, analytics, API keys, and unified documentation without requiring changes to the underlying API code.", "when_to_avoid": ["you only need simple reverse proxying without API management features", "you want a lightweight gateway embedded in a modern service mesh or Kubernetes-native stack", "your team is unwilling to operate a Ruby/OpenResty-based self-hosted platform", "you need deep cloud-vendor integration offered by managed API gateways"], "when_to_choose": ["you need a full API management layer (keys, rate limits, analytics, portal) in front of existing services", "you want to unify heterogeneous APIs under one endpoint and credential system", "you run public data APIs and want self-service onboarding for consumers", "you prefer a self-hosted, open source alternative to commercial API gateways"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/api-umbrella", "repo": "NatLabRockies/api-umbrella", "role": "main", "score": 67}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.227918+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:47:11.923156+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "38bd3c201a20d8478a92354f56d71c85d5b70310018b5e8d8eb8d18179a25519", "fetched_at": "2026-08-28T04:06:25.227918+00:00", "kind": "readme", "missing": false, "url": "https://github.com/NatLabRockies/api-umbrella"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.227918+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:47:11.923156+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "38bd3c201a20d8478a92354f56d71c85d5b70310018b5e8d8eb8d18179a25519", "fetched_at": "2026-08-28T04:06:25.227918+00:00", "kind": "readme", "missing": false, "url": "https://github.com/NatLabRockies/api-umbrella"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:47:11.923156+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "38bd3c201a20d8478a92354f56d71c85d5b70310018b5e8d8eb8d18179a25519", "fetched_at": "2026-08-28T04:06:25.227918+00:00", "kind": "readme", "missing": false, "url": "https://github.com/NatLabRockies/api-umbrella"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.227918+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.227918+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.227918+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:47:11.923156+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "38bd3c201a20d8478a92354f56d71c85d5b70310018b5e8d8eb8d18179a25519", "fetched_at": "2026-08-28T04:06:25.227918+00:00", "kind": "readme", "missing": false, "url": "https://github.com/NatLabRockies/api-umbrella"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.227918+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.227918+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:47:11.923156+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "38bd3c201a20d8478a92354f56d71c85d5b70310018b5e8d8eb8d18179a25519", "fetched_at": "2026-08-28T04:06:25.227918+00:00", "kind": "readme", "missing": false, "url": "https://github.com/NatLabRockies/api-umbrella"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.227918+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.227918+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.227918+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:47:11.923156+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "38bd3c201a20d8478a92354f56d71c85d5b70310018b5e8d8eb8d18179a25519", "fetched_at": "2026-08-28T04:06:25.227918+00:00", "kind": "readme", "missing": false, "url": "https://github.com/NatLabRockies/api-umbrella"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.227918+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.227918+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:47:11.923156+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "38bd3c201a20d8478a92354f56d71c85d5b70310018b5e8d8eb8d18179a25519", "fetched_at": "2026-08-28T04:06:25.227918+00:00", "kind": "readme", "missing": false, "url": "https://github.com/NatLabRockies/api-umbrella"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:47:11.923156+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "38bd3c201a20d8478a92354f56d71c85d5b70310018b5e8d8eb8d18179a25519", "fetched_at": "2026-08-28T04:06:25.227918+00:00", "kind": "readme", "missing": false, "url": "https://github.com/NatLabRockies/api-umbrella"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:47:11.923156+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "38bd3c201a20d8478a92354f56d71c85d5b70310018b5e8d8eb8d18179a25519", "fetched_at": "2026-08-28T04:06:25.227918+00:00", "kind": "readme", "missing": false, "url": "https://github.com/NatLabRockies/api-umbrella"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:47:11.923156+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "38bd3c201a20d8478a92354f56d71c85d5b70310018b5e8d8eb8d18179a25519", "fetched_at": "2026-08-28T04:06:25.227918+00:00", "kind": "readme", "missing": false, "url": "https://github.com/NatLabRockies/api-umbrella"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 98, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 5116, "days_push": 16, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 67, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}