ApiFinder
Automatically discover and document Next.js API endpoints by analyzing your project's file structure.
ApiFinder scans your Next.js project for API routes in both Pages Router and App Router patterns, extracts HTTP methods, and generates beautiful documentation.
CLI Usage
# Analyze current directory and update README.md
apifinder
# Analyze specific project path
apifinder --path /path/to/your/nextjs-project
# Output to custom file
apifinder --output API_DOCS.md
# Preview without updating files
apifinder --dry-run
# Get JSON output
apifinder --json
Programmatic Usage
const { ApiFinder } = require('apifinder');
async function analyzeProject() {
const analyzer = new ApiFinder('./my-nextjs-project');
const endpoints = await analyzer.analyze();
console.log('Found endpoints:', endpoints);
// Generate markdown table
const markdownTable = analyzer.generateMarkdownTable();
console.log(markdownTable);
// Update README.md
await analyzer.updateReadme();
}
analyzeProject();
Supported Patterns
Pages Router
- pages/api/users.js → /api/users
- pages/api/users/[id].js → /api/users/:id
- pages/api/posts/[...slug].js → /api/posts/*slug
- src/pages/api/auth/login.js → /api/auth/login
App Router
- app/api/users/route.js → /api/users
- app/api/users/[id]/route.js → /api/users/:id
- app/api/posts/[...slug]/route.js → /api/posts/*slug
- src/app/api/auth/login/route.js → /api/auth/login
Output Example
ApiFinder generates a table like this in your README:
Route | Methods | File | Type |
---|
/api/auth/login | POST | pages/api/auth/login.js | Pages Router |
/api/users | GET, POST | app/api/users/route.js | App Router |
/api/users/:id | GET, PUT, DELETE | app/api/users/[id]/route.js | App Router |
/api/posts/*slug | GET | pages/api/posts/[...slug].js | Pages Router |
Configuration
CLI Options
Option | Description | Default |
---|
-p, --path <path> | Path to Next.js project | Current directory |
-o, --output <file> | Output README file | README.md |
--dry-run | Show endpoints without updating README | false |
--json | Output endpoints as JSON | false |