Complete API reference for XueDAO Official Website
The API is organized into three main categories with clear authentication boundaries:
- Purpose: OAuth and session management
- Authentication: Public/OAuth flow
- Routes:
POST /api/auth/signin- Google OAuth initializationGET /api/auth/callback- OAuth callback handlerPOST /api/auth/signout- Session terminationGET /api/auth/check-admin- Admin status verification
- Purpose: Public-facing functionality
- Authentication: None required
- Routes:
GET /api/jobs- Public job listingsPOST /api/applications- Application submissionPOST /api/public/applications- Alternative application endpointGET /api/public/settings- Public settings
- Purpose: Administrative functions
- Authentication: Admin email verification required
- Routes:
GET /api/admin/check- Admin authentication verificationGET /api/admin/jobs- Admin job managementPATCH /api/admin/jobs- Job status updatesDELETE /api/admin/jobs- Job deletionGET /api/admin/applications- Application reviewPATCH /api/applications/[id]- Application status updatesGET/POST/PUT /api/admin/settings- Settings management
const adminEmails = process.env.ADMIN_EMAILS?.split(',') || []
const isAdmin = adminEmails.includes(user.email || '')- Service Role Client: Public submissions and admin operations (bypasses RLS)
- User Client: Authenticated user operations (with RLS)
- Dual Client Pattern: Public endpoints use service role, admin endpoints verify auth then use service role
{
data: T,
meta?: {
total: number,
page?: number,
limit?: number
}
}{
error: {
message: string,
code?: string,
details?: any
}
}- 200: Success
- 201: Created (for POST operations)
- 400: Bad Request (validation errors)
- 401: Unauthorized (authentication required)
- 403: Forbidden (admin access required)
- 404: Not Found
- 409: Conflict (duplicate data)
- 500: Internal Server Error
Operations continue even if email notifications fail, with errors logged for debugging.
- Zod schemas for runtime validation
- SQL injection prevention via parameterized queries
- XSS protection through input sanitization
Implemented at Vercel level for abuse prevention.
Configured headers for YouTube embeds and external resources.
- Type Definitions - Request/response type schemas
- Architecture - System design patterns
- CLAUDE.md - Development commands and setup