A Claude skill that automatically discovers all API endpoints in your project and tests them using [HTTPie](https://github.com/httpie/cli) — the modern, human-friendly CLI HTTP client.
SaferSkills independently audited httpie-api-tester (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Use this skill to automatically discover all API endpoints in a project and test them with HTTPie.
HTTPie (http) is a modern, human-friendly CLI HTTP client. It produces colorized, formatted output and has terse syntax for common patterns.
Install if missing:
pip install httpie --break-system-packagesScan the project to find all defined API routes. Use multiple strategies in parallel:
# Detect framework
find . -name "package.json" -o -name "requirements.txt" -o -name "Gemfile" \
-o -name "go.mod" -o -name "Cargo.toml" | head -5Then use the appropriate strategy from references/discovery.md for the detected framework.
Quick universal scan (works across frameworks):
# Find route definitions by common patterns
grep -rn --include="*.js" --include="*.ts" --include="*.py" --include="*.rb" \
--include="*.go" --include="*.java" --include="*.rs" \
-E "(GET|POST|PUT|PATCH|DELETE|app\.(get|post|put|patch|delete)|router\.(get|post|put|patch|delete)|@(Get|Post|Put|Patch|Delete|RequestMapping))" \
. --exclude-dir={node_modules,.git,dist,build,vendor} 2>/dev/null | head -60Also check for OpenAPI/Swagger specs:
find . -name "openapi.yml" -o -name "openapi.yaml" -o -name "swagger.json" \
-o -name "swagger.yaml" -o -name "api.yml" 2>/dev/null | head -5Read references/discovery.md for framework-specific patterns (Express, FastAPI, Django, Rails, Go, etc.)
Ask the user or infer from config files:
# Common config file locations
cat .env 2>/dev/null || cat .env.local 2>/dev/null || cat config/application.rb 2>/dev/null
grep -r "PORT\|HOST\|BASE_URL\|SERVER_URL" .env* config* *.config.* 2>/dev/null | head -10HTTPie localhost shorthand:
:3000 → http://localhost:3000:/api/users → http://localhost/api/usersDefault assumption: http://localhost:8000 (adjust per project).
# Basic methods
http GET :8000/api/users
http POST :8000/api/users name="Alice" email="[email protected]"
http PUT :8000/api/users/1 name="Alice Updated"
http PATCH :8000/api/users/1 active:=false
http DELETE :8000/api/users/1
# Headers
http GET :8000/api/protected Authorization:"Bearer <token>"
# Query params
http GET :8000/api/search q==hello page==1
# JSON body (explicit)
http --json POST :8000/api/data key=value count:=42 tags:='["a","b"]'
# Form data
http --form POST :8000/upload file@/path/to/file.txt
# Auth shortcuts
http -a username:password GET :8000/api/secure # Basic auth
http --bearer TOKEN GET :8000/api/secure # Bearer token
# Useful flags
http --check-status ... # Exit non-zero on 4xx/5xx
http --timeout=5 ... # Set timeout in seconds
http --verify=no ... # Skip SSL verification (dev only)
http --follow ... # Follow redirects
http --print=HhBb ... # H=request headers, h=response headers, B=request body, b=response body
# Quiet / script-friendly
http --ignore-stdin --check-status GET :8000/healthHealth check first:
http --ignore-stdin GET :8000/health || http --ignore-stdin GET :8000/Test with output saved:
http GET :8000/api/users > /tmp/users_response.jsonTest all endpoints in sequence, report pass/fail:
# Use --check-status to catch errors; capture exit codes
http --check-status --ignore-stdin GET :8000/api/users && echo "✅ GET /api/users" || echo "❌ GET /api/users"Use scripts/run_tests.sh as a template — generate a customized version for the project.
See references/test_script_template.sh for the full template with:
Present results in a clear table:
| Method | Endpoint | Status | Time | Result |
|---|---|---|---|---|
| GET | /api/users | 200 | 45ms | ✅ Pass |
| POST | /api/users | 201 | 63ms | ✅ Pass |
| DELETE | /api/users/999 | 404 | 12ms | ✅ Pass (expected) |
Note any:
/login or /auth first and extract the token--verify=no for self-signed certshttp --stream GET :8000/eventshttp --multipart POST :8000/upload file@./test.png~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.