Skip to main content

API Routes Overview

The template exposes approximately 151 API route handlers organized across 29 route groups under the app/api/ directory. All routes use the Next.js App Router convention with route.ts files exporting HTTP method handlers (GET, POST, PUT, PATCH, DELETE).

Route Groups

GroupPathDescriptionApprox. Routes
admin/api/admin/*Admin panel CRUD operations~60
auth/api/auth/*NextAuth handlers + password management2
categories/api/categories/*Public category queries1
client/api/client/*Client dashboard and item management~7
collections/api/collections/*Public collection queries1
config/api/config/*Feature flag configuration1
cron/api/cron/*Scheduled background jobs3
current-user/api/current-userCurrent authenticated user info1
extract/api/extractURL metadata extraction1
favorites/api/favorites/*User favorite items2
featured-items/api/featured-itemsFeatured item listings1
geocode/api/geocodeAddress geocoding1
health/api/health/*System health checks1
internal/api/internal/*Internal operations (DB init)1
items/api/items/*Public item endpoints (comments, votes, views)~12
lemonsqueezy/api/lemonsqueezy/*Lemon Squeezy payment integration7
location/api/location/*Location search and data4
payment/api/payment/*Generic payment/subscription management3
polar/api/polar/*Polar payment integration5
reference/api/referenceReference data endpoint1
reports/api/reportsPublic report submission1
solidgate/api/solidgate/*Solidgate payment integration2
sponsor-ads/api/sponsor-ads/*Sponsor ad management7
stripe/api/stripe/*Stripe payment integration~17
surveys/api/surveys/*Survey CRUD and responses4
user/api/user/*User profile and subscription5
verify-recaptcha/api/verify-recaptchareCAPTCHA verification1
version/api/version/*Application version info2

Architecture Patterns

Route Handler Structure

Route handlers follow a consistent thin-handler pattern:

// app/api/admin/items/route.ts
import { withAdminAuth } from '@/lib/auth/admin-guard';

export const GET = withAdminAuth(async (request: NextRequest) => {
// 1. Parse and validate input (query params, body)
// 2. Call service or repository
// 3. Return JSON response
return NextResponse.json({ success: true, data: result });
});

Authentication Patterns

Routes use different authentication levels:

LevelMethodUsage
PublicNo auth checkItem listings, health checks, version info
Authenticatedauth() or getCachedSession()User profile, favorites, client endpoints
AdminwithAdminAuth() or checkAdminAuth()All /api/admin/* routes
CronCRON_SECRET header check/api/cron/* routes

Error Handling

API routes use a consistent error response format:

// Success
{ success: true, data: { ... } }

// Error
{ success: false, error: 'Human-readable error message' }

HTTP status codes follow REST conventions:

StatusUsage
200Successful GET, PUT, PATCH
201Successful POST (resource created)
400Invalid request body or parameters
401Missing or invalid authentication
403Authenticated but insufficient permissions
404Resource not found
409Conflict (duplicate resource)
500Internal server error

Pagination

List endpoints typically support cursor or offset-based pagination:

GET /api/admin/items?page=1&limit=20&sort=createdAt&order=desc

Common query parameters:

ParameterTypeDefaultDescription
pagenumber1Page number (1-based)
limitnumber20Items per page
sortstringcreatedAtSort field
orderstringdescSort direction (asc or desc)
searchstring-Full-text search query

Response Envelope

Paginated responses include metadata:

{
"success": true,
"data": [ ... ],
"pagination": {
"page": 1,
"limit": 20,
"total": 156,
"totalPages": 8
}
}

Directory Structure

app/api/
admin/ # Admin-only endpoints (19 resource groups)
auth/ # NextAuth + password management
categories/ # Public category data
client/ # Client-facing dashboard + items
collections/ # Public collection data
config/ # Feature configuration
cron/ # Scheduled jobs (sync, subscriptions)
current-user/ # Current user session info
extract/ # URL metadata extraction
favorites/ # Favorite item management
featured-items/ # Featured item listings
geocode/ # Geocoding service
health/ # Health checks (database)
internal/ # Internal operations
items/ # Public item interactions
lemonsqueezy/ # Lemon Squeezy payments
location/ # Location data (countries, cities)
payment/ # Generic payment management
polar/ # Polar payments
reference/ # Reference data
reports/ # Content reports
solidgate/ # Solidgate payments
sponsor-ads/ # Sponsor advertisement management
stripe/ # Stripe payments
surveys/ # Survey management
user/ # User profile endpoints
verify-recaptcha/ # reCAPTCHA verification
version/ # App version info