API Reference
Base URL: https://universalforge-api.fly.dev
Auth
/api/v1/auth/registerCreate a new account
Body: { email, password, full_name? }
/api/v1/auth/loginSign in with email and password
Body: { email, password }
/api/v1/auth/oauthSign in with OAuth provider
Body: { provider, code }
/api/v1/auth/refreshRefresh access token
Body: { refresh_token }
/api/v1/auth/logoutInvalidate session
Body: { refresh_token }
/api/v1/auth/forgot-passwordSend password reset email
Body: { email }
/api/v1/auth/reset-passwordReset password with token
Body: { token, password }
/api/v1/auth/verify-emailVerify email address
Body: { token }
Jobs
/api/v1/jobsList your conversion jobs
Query: status?, page?, limit?
/api/v1/jobsCreate a new conversion job
Body: { source_type, target_type, file_id? }
/api/v1/jobs/:idGet job details and status
/api/v1/jobs/:idCancel a pending job
/api/v1/jobs/:id/retryRetry a failed job
/api/v1/jobs/:id/downloadDownload converted artifact
User
/api/v1/user/profileGet your profile
/api/v1/user/profileUpdate profile
Body: { full_name?, avatar_url? }
/api/v1/user/creditsGet credit balance
/api/v1/user/notification-preferencesUpdate notification settings
Body: { email_notifications?, ... }
/api/v1/user/accountDelete your account
/api/v1/auth/resend-verificationResend verification email
Body: { email }
/api/v1/user/change-passwordChange password
Body: { current_password, new_password }
Billing
/api/v1/billing/gatewaysList available payment gateways
/api/v1/billing/plansList subscription plans
/api/v1/billing/webhookPayment webhook receiver
Query: gateway=(stripe|paystack|flutterwave)
/api/v1/billing/checkoutCreate subscription checkout
Body: { plan_id, gateway, success_url, cancel_url }
/api/v1/billing/credit-packs/checkoutPurchase credit pack
Body: { credits, gateway, success_url, cancel_url }
/api/v1/billing/portalGet Stripe customer portal URL
/api/v1/billing/verifyVerify payment status
Query: session_id?
Storage & Tools
/api/v1/storage/uploadUpload a file for conversion
Body: multipart/form-data
/api/v1/tools/scrape/startStart async scrape, returns session_id to poll
Body: { url, ownership_confirmed }
/api/v1/tools/scrape/progress/:sessionIdPoll scrape progress (% , stage, done, file_path)
Realtime
/api/v1/jobs/:id/wsWebSocket for live job updates
Query: token=
Authentication
Most endpoints require a Bearer token sent via the Authorization header. Tokens are obtained from POST /api/v1/auth/login or POST /api/v1/auth/register. Include rate limiting headers: X-RateLimit-Remaining and X-RateLimit-Reset.
Webhooks
Payment webhooks from Stripe, Paystack, and Flutterwave are received at POST /api/v1/billing/webhook?gateway=stripe|paystack|flutterwave. Each gateway's signature is verified using the configured secret before processing.
Rate Limiting
Auth endpoints are rate-limited to 10 requests per 15 minutes per IP. General API rate limits are enforced via Redis. Exceeded limits return 429 Too Many Requests.