22 <img src =" ApiProber_logo.jpg " alt =" ApiProber " width =" 700 " >
33</p >
44
5- # ApiProber -- Systematic API Discovery Tool
5+ # ApiProber -- Passive API Discovery and Documentation Tool
66
7- Probe undocumented or poorly documented APIs. Discover endpoints through
8- trial-and-error, map API structures, store results in SQLite, and generate
9- documentation.
7+ ApiProber is a zero-dependency Python CLI for passive API discovery. It helps
8+ developers and maintainers map undocumented REST services, compare live
9+ behavior with API documentation, persist observations in SQLite, and export
10+ Markdown or JSON documentation.
1011
1112** Author:** Lukas Geiger | ** License:** MIT | ** Python:** 3.8+ (stdlib only)
1213
1314---
1415
16+ ## Best Fit
17+
18+ - Internal REST services where no OpenAPI file exists
19+ - Legacy APIs that need lightweight endpoint documentation
20+ - Documentation audits where live behavior should be compared with expected routes
21+ - Local-first reconnaissance before writing a proper client or SDK
22+ - Passive security review with explicit authorization
23+
24+ ApiProber is not an exploit framework, vulnerability scanner, load tester, or
25+ fuzzer. Use it only on APIs you own or are allowed to assess.
26+
27+ ---
28+
1529## Features
1630
1731- ** Multi-Strategy Discovery:** OpenAPI detection, wordlist probing, pattern expansion, HATEOAS link following
@@ -32,11 +46,11 @@ documentation.
3246No installation required -- works with Python 3.8+ standard library only.
3347
3448``` bash
35- git clone https://github.com/lukisch /apiprober.git
49+ git clone https://github.com/dev-bricks /apiprober.git
3650cd apiprober
3751
38- # Run directly
39- python -m ApiProber --help
52+ # Run directly from the repository root
53+ python api_prober.py --help
4054
4155# Or install as package
4256pip install -e .
@@ -51,47 +65,47 @@ apiprober --help
5165
5266``` bash
5367# Basic probe
54- python -m ApiProber probe https://jsonplaceholder.typicode.com
68+ python api_prober.py probe https://jsonplaceholder.typicode.com
5569
5670# Deep probe with custom delay
57- python -m ApiProber probe https://api.example.com --depth 2 --delay-ms 1000
71+ python api_prober.py probe https://api.example.com --depth 2 --delay-ms 1000
5872
5973# Authenticated probe
60- python -m ApiProber probe https://api.example.com --auth-type bearer --auth-value " YOUR_TOKEN"
74+ python api_prober.py probe https://api.example.com --auth-type bearer --auth-value " YOUR_TOKEN"
6175```
6276
6377### Manage Services
6478
6579``` bash
6680# List all probed services
67- python -m ApiProber list
81+ python api_prober.py list
6882
6983# Show details for a specific service
70- python -m ApiProber status jsonplaceholder
84+ python api_prober.py status jsonplaceholder
7185
7286# Resume interrupted probing
73- python -m ApiProber resume jsonplaceholder
87+ python api_prober.py resume jsonplaceholder
7488```
7589
7690### Export Results
7791
7892``` bash
7993# Export as Markdown documentation
80- python -m ApiProber export jsonplaceholder --format md
94+ python api_prober.py export jsonplaceholder --format md
8195
8296# Export as JSON (OpenAPI-like)
83- python -m ApiProber export jsonplaceholder --format json
97+ python api_prober.py export jsonplaceholder --format json
8498```
8599
86100### Configuration
87101
88102``` bash
89103# Show current config
90- python -m ApiProber config --show
104+ python api_prober.py config --show
91105
92106# Set values
93- python -m ApiProber config --set delay_ms 1000
94- python -m ApiProber config --set auth.type bearer
107+ python api_prober.py config --set delay_ms 1000
108+ python api_prober.py config --set auth.type bearer
95109```
96110
97111---
@@ -114,7 +128,7 @@ ApiProber is designed for responsible API exploration:
114128- ** Default: Read-only** -- Only GET, HEAD, OPTIONS (no POST/PUT/DELETE unless ` --test-all-methods ` flag)
115129- ** Built-in rate limiting** -- Configurable delay between requests
116130- ** robots.txt compliance** -- Automatically respects access restrictions
117- - ** Transparent User-Agent** -- ` ApiProber/0.1 (github.com/lukisch ; passive-discovery) `
131+ - ** Transparent User-Agent** -- ` ApiProber/0.1 (github.com/dev-bricks/apiprober ; passive-discovery) `
118132- ** No fuzzing, no exploitation** -- Purely passive discovery
119133
120134---
@@ -154,11 +168,19 @@ ApiProber/
154168
155169## Use Cases
156170
157- - ** Reverse engineering ** undocumented internal APIs
171+ - ** Documenting ** undocumented internal APIs
158172- ** Validating** API documentation against actual behavior
159- - ** Discovering ** hidden endpoints in third-party services
173+ - ** Finding ** reachable endpoints in systems you are authorized to assess
160174- ** Generating** API documentation for legacy systems
161- - ** Security auditing** (passive reconnaissance only)
175+ - ** Security auditing** through passive reconnaissance only
176+
177+ ---
178+
179+ ## Discoverability Keywords
180+
181+ ` passive API discovery ` , ` REST API documentation generator ` , ` OpenAPI detection ` ,
182+ ` HATEOAS link crawler ` , ` local-first API reconnaissance ` , `zero-dependency Python
183+ CLI` , ` SQLite API inventory` , ` ethical API probing`
162184
163185---
164186
@@ -168,17 +190,36 @@ MIT License. See [LICENSE](LICENSE).
168190
169191---
170192
193+ ## Development
194+
195+ Run the local smoke tests without live network probing:
196+
197+ ``` bash
198+ python -m pytest -q
199+ python -m compileall -q .
200+ ```
201+
202+ The live ` jsonplaceholder.typicode.com ` probe is opt-in for manual checks:
203+
204+ ``` bash
205+ set APIPROBER_RUN_NETWORK_TESTS=1
206+ python -m pytest -q test_smoke.py
207+ ```
208+
209+ ---
210+
171211## Author
172212
173213Lukas Geiger -- [ github.com/lukisch] ( https://github.com/lukisch )
174214
215+ Repository -- [ dev-bricks/apiprober] ( https://github.com/dev-bricks/apiprober )
216+
175217---
176218
177219## Haftung / Liability
178220
179- Dieses Projekt ist eine ** unentgeltliche Open-Source-Schenkung** im Sinne der §§ 516 ff. BGB. Die Haftung des Urhebers ist gemäß ** § 521 BGB** auf ** Vorsatz und grobe Fahrlässigkeit** beschränkt. Ergänzend gelten die Haftungsausschlüsse aus GPL-3.0 / MIT / Apache-2.0 §§ 15–16 (je nach gewählter Lizenz) .
221+ Dieses Projekt ist eine ** unentgeltliche Open-Source-Schenkung** im Sinne der §§ 516 ff. BGB. Die Haftung des Urhebers ist gemäß ** § 521 BGB** auf ** Vorsatz und grobe Fahrlässigkeit** beschränkt. Ergänzend gelten die Haftungsausschlüsse aus der MIT- Lizenz.
180222
181223Nutzung auf eigenes Risiko. Keine Wartungszusage, keine Verfügbarkeitsgarantie, keine Gewähr für Fehlerfreiheit oder Eignung für einen bestimmten Zweck.
182224
183225This project is an unpaid open-source donation. Liability is limited to intent and gross negligence (§ 521 German Civil Code). Use at your own risk. No warranty, no maintenance guarantee, no fitness-for-purpose assumed.
184-
0 commit comments