Web API Routes
Quick links: Frontend • Backend
Backend
All routes live under apps/web/src/app/api.
Billing and Sessions
-
POST /api/create-checkout-session- Headers:
Authorization: Bearer <Firebase ID token>(email must be verified) - Body:
{ "planId": "starter" | "pro" } - Returns:
{ sessionId } - Behavior: validates stored Stripe customer, reuses by email if missing, otherwise creates and links to the user.
- Headers:
-
POST /api/billing/change-plan- Headers:
Authorization: Bearer <Firebase ID token> - Body:
{ "planId": "starter" | "pro" } - Returns:
{ success, subscription, requiresAction?, paymentIntentClientSecret? }- When
requiresActionistrue, confirm the returnedpaymentIntentClientSecretvia Stripe.js before refreshing claims.
- When
- Headers:
-
POST /api/verify-session- Body:
{ "sessionId": string } - Returns:
{ subscription, customToken, success: true }
- Body:
-
POST /api/auth/sessionandDELETE /api/auth/session- Create or clear HTTP-only
__sessioncookie from Firebase ID token.
- Create or clear HTTP-only
-
POST /api/billing/portal- Requires
__sessioncookie; returns{ url }for Stripe Billing Portal.
- Requires
Credits
GET /api/credits/balance- Requires
__sessioncookie. - Returns:
{ authenticated: true, balance: number, periodStart: ISO | null, periodEnd: ISO | null, planId: string | null, priceId: string | null }
- Requires
Stripe webhooks are handled by the Firebase Function stripeWebhook (Cloud Functions URL). Configure Stripe Dashboard to call your deployed Functions URL.
The handler processes: checkout.session.completed, customer.subscription.*, invoice.payment_* to upsert users/{uid}/subscription/current and temp checkout state.
API Keys & Request Logs
GET /api/api-keys— list current keys for the authenticated user via__session.POST /api/api-keys— create a new API key; mirrors hashed key to rootapiKeys/{hash}for Functions validation.DELETE /api/api-keys/[id]— revoke a key by id; mirrors revoke to rootapiKeys/{hash}.GET /api/api-requests— paginated list of recent Public API requests logged underusers/{uid}/apiRequests.
Utilities
GET /api/debug-env— environment presence diagnostics (non-sensitive).GET /api/tiktok/callback— local desktop OAuth shim for TikTok.
Middleware
src/middleware.jsenforces presence of__sessioncookie on/dashboardand/api/billing/*paths.
Related frontend: see Frontend
Frontend
- Client pages call these routes for server-only operations (Stripe, cookies, local shims).
AuthContexttriggers/api/auth/sessionwhen Firebase ID token changes.- Success page calls
/api/verify-sessionto finalize checkout.
Related backend: see Backend