{"adoption": {"forks": 372, "observed_at": "2026-08-28T04:10:35.988134+00:00", "stars": 9594}, "canonical_url": "https://ross.abutalabs.com/products/mitmproxy2swagger", "card": {"archived": false, "artifact_type": "cli-tool", "description": "Automagically reverse-engineer REST APIs via capturing traffic", "domain": ["apis", "developer-tools", "reverse-engineering", "documentation"], "enriched": true, "function": ["reverse-engineering", "api-documentation", "parser", "developer-tools"], "health_score": 99, "homepage": null, "language": "HTML", "license": null, "license_family": "other", "maturity": "active", "member_repos": ["alufers/mitmproxy2swagger"], "name": "alufers/mitmproxy2swagger", "platform": ["cli", "python", "cross-platform"], "pushed_at": "2026-08-24T18:24:23+00:00", "repo": "alufers/mitmproxy2swagger", "stars": 9594, "tags": ["openapi", "swagger", "mitmproxy", "har", "traffic-capture", "rest-api", "docker"], "topics": ["mitmproxy", "openapi", "reverse-engineering", "swagger"], "urls": [], "use_cases": ["generate openapi spec from captured http traffic", "reverse-engineer an undocumented rest api", "convert mitmproxy flow file to swagger", "create api documentation from har file", "document a mobile app's backend api", "merge multiple traffic captures into one api spec"], "what_it_is": "A CLI tool that converts mitmproxy traffic captures (and HAR files) into OpenAPI 3.0 / Swagger specifications. It lets you reverse-engineer undocumented REST APIs by capturing HTTP traffic and merging results into an existing schema.", "when_to_avoid": ["you need to document GraphQL or non-REST APIs", "you already have hand-written OpenAPI specs and just need editing tooling", "traffic is encrypted and you cannot set up a MITM proxy"], "when_to_choose": ["you need an OpenAPI spec for an API with no existing documentation", "you can capture the API's traffic via mitmproxy or browser DevTools HAR export", "you want to incrementally extend an existing schema with new captures"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/mitmproxy2swagger", "repo": "alufers/mitmproxy2swagger", "role": "main", "score": 83}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:10:35.988134+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T17:21:54.148954+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "07f82669c39dbc64a740e6f136339d21ff7bef94544b4cf5a94ba8bdde3a2595", "fetched_at": "2026-08-28T04:10:35.988134+00:00", "kind": "readme", "missing": false, "url": "https://github.com/alufers/mitmproxy2swagger"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:10:35.988134+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T17:21:54.148954+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "07f82669c39dbc64a740e6f136339d21ff7bef94544b4cf5a94ba8bdde3a2595", "fetched_at": "2026-08-28T04:10:35.988134+00:00", "kind": "readme", "missing": false, "url": "https://github.com/alufers/mitmproxy2swagger"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T17:21:54.148954+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "07f82669c39dbc64a740e6f136339d21ff7bef94544b4cf5a94ba8bdde3a2595", "fetched_at": "2026-08-28T04:10:35.988134+00:00", "kind": "readme", "missing": false, "url": "https://github.com/alufers/mitmproxy2swagger"}], "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:10:35.988134+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:10:35.988134+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:10:35.988134+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T17:21:54.148954+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "07f82669c39dbc64a740e6f136339d21ff7bef94544b4cf5a94ba8bdde3a2595", "fetched_at": "2026-08-28T04:10:35.988134+00:00", "kind": "readme", "missing": false, "url": "https://github.com/alufers/mitmproxy2swagger"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:10:35.988134+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:10:35.988134+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T17:21:54.148954+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "07f82669c39dbc64a740e6f136339d21ff7bef94544b4cf5a94ba8bdde3a2595", "fetched_at": "2026-08-28T04:10:35.988134+00:00", "kind": "readme", "missing": false, "url": "https://github.com/alufers/mitmproxy2swagger"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:10:35.988134+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:10:35.988134+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:10:35.988134+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T17:21:54.148954+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "07f82669c39dbc64a740e6f136339d21ff7bef94544b4cf5a94ba8bdde3a2595", "fetched_at": "2026-08-28T04:10:35.988134+00:00", "kind": "readme", "missing": false, "url": "https://github.com/alufers/mitmproxy2swagger"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:10:35.988134+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:10:35.988134+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T17:21:54.148954+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "07f82669c39dbc64a740e6f136339d21ff7bef94544b4cf5a94ba8bdde3a2595", "fetched_at": "2026-08-28T04:10:35.988134+00:00", "kind": "readme", "missing": false, "url": "https://github.com/alufers/mitmproxy2swagger"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T17:21:54.148954+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "07f82669c39dbc64a740e6f136339d21ff7bef94544b4cf5a94ba8bdde3a2595", "fetched_at": "2026-08-28T04:10:35.988134+00:00", "kind": "readme", "missing": false, "url": "https://github.com/alufers/mitmproxy2swagger"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T17:21:54.148954+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "07f82669c39dbc64a740e6f136339d21ff7bef94544b4cf5a94ba8bdde3a2595", "fetched_at": "2026-08-28T04:10:35.988134+00:00", "kind": "readme", "missing": false, "url": "https://github.com/alufers/mitmproxy2swagger"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T17:21:54.148954+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "07f82669c39dbc64a740e6f136339d21ff7bef94544b4cf5a94ba8bdde3a2595", "fetched_at": "2026-08-28T04:10:35.988134+00:00", "kind": "readme", "missing": false, "url": "https://github.com/alufers/mitmproxy2swagger"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 53}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 1575, "days_push": 9, "days_rel": 100, "gap_med": 528, "n_releases_24m": 2}, "score": 83, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}