| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
A powerful directory brute-force tool designed for API reconnaissance and penetration testing. Automatically discovers hidden API endpoints, performs recursive subscanning, and probes HTTP methods for deeper API enumeration.
✨ Core Capabilities:
# Clone the repository
git clone https://github.com/austinjump-sec/API-SPY.git
cd API-SPY
# Install dependencies
pip install requests
# Make scripts executable (optional)
chmod +x apispy.py apiprobe.pypython3 apispy.py <baseUrl> <wordlist> [OPTIONS]| Argument | Description |
|---|---|
| <baseUrl> | Target URL (e.g., http://example.com or http://api.example.com) |
| <wordlist> | Path to wordlist file containing endpoints (one per line) |
| Argument | Description |
|---|---|
| --t<number> | Thread count (max 150, default: 1) |
| --split | Use tmux split-window instead of new terminal windows |
| --debug | Shows otherwise hidden error messages |
| --loud | Shows all messages, positive and errors, highlighting any that dont return 404 |
| --js | Scans for JavaScript files and scrapes any found ones for common hardcoded API endpoints |
python3 apispy.py http://api.example.com wordlist.txtpython3 apispy.py http://api.example.com wordlist.txt -t10python3 apispy.py http://api.example.com wordlist.txt -t5 --splitpython3 apispy.py http://api.example.com/v1 wordlist.txt -t20The tool starts by testing a predefined set of common API paths:
When an endpoint is found, you're prompted:
'-> Subscan <url>? (y/n) [Auto-skip in 5s]:
After subscanning, you're prompted:
'-> Probe methods on <url>? (y/n) [Auto-skip in 5s]:
[+] Url found: http://api.example.com/v1 ← 200 OK (accessible)
'-> Subscan http://api.example.com/v1? (y/n) [Auto-skip in 0s]:
[-] Timeout: Skipped prompt for http://api.example.com/v1?
'-> Probe methods on http://api.example.com/v1? (y/n) [Auto-skip in 4s]:
[-] Url found but not permitted (403 ERR): ... ← Forbidden but exists
[-] Url found but not permitted (401 ERR): ... ← Requires authentication
[+] GET -> STATUS: 200 OK (Size: 1024) [-] POST -> STATUS: 405 (Size: 0) [Header Hint] Allow: GET, HEAD, OPTIONS
Create a simple text file with endpoints (one per line):
admin users api/users v1/products v2/customers /api/v1/auth /graphql search data config
Note: Lines starting with # are treated as comments and ignored.
Popular API wordlists to use with API-SPY:
# Stealth mode (low threads)
python3 apispy.py http://target.com wordlist.txt -t3
# Balanced mode
python3 apispy.py http://target.com wordlist.txt -t15
# Aggressive mode
python3 apispy.py http://target.com wordlist.txt -t50Ensure the wordlist path is correct and the file exists:
ls -la /path/to/wordlist.txtWhen subscanning, ensure:
If --split fails:
⚠️ Legal & Ethical:
Edit the source code to adjust timeout values:
def ask_subscan(url, wordlist, timeout=10): # Change from 5 to 10 secondsCreate wordlists targeting specific API paths:
# Admin endpoints only
grep -i "admin" full-wordlist.txt > admin-wordlist.txt
# v1 API only
grep "v1" full-wordlist.txt > v1-wordlist.txtScan multiple targets with a loop:
for target in http://target1.com http://target2.com http://target3.com; do
python3 apispy.py "$target" wordlist.txt -t10
doneContributions are welcome! Feel free to:
This tool is provided for educational and authorized security testing purposes only. Users are responsible for ensuring they have proper authorization before scanning any systems. Unauthorized access to computer systems is illegal.
This project is provided as-is for security research and authorized testing purposes.
Created by: austinjump-sec
Repository: austinjump-sec/API-SPY
| Back | FazBrowse Home | New Git URL |