{"message":"Hello from MEDY backend","version":"2.0.0","region":{"region":"md","currency":"MDL","currency_symbol":"MDL","languages":["ro","ru","en"],"default_language":"ro"},"stripe_integration":"✅ Active","oauth_improvements":"✅ SPA-friendly OAuth flow implemented","endpoints":{"sms":{"send_code":"POST /api/auth/sms/send-code","verify":"POST /api/auth/sms/verify"},"google":{"config":"GET /api/auth/google/config","login":"GET /api/auth/google","callback":"GET /api/auth/google/callback","exchange_code":"POST /api/auth/google/exchange-code"},"profile":{"me":"GET /api/auth/me","debug_token":"GET /api/auth/debug-token","update":"PUT /api/auth/profile"},"medical":{"upload":"POST /api/medical/upload","documents":"GET /api/medical/documents","status":"GET /api/medical/documents/:id/status","reanalyze":"POST /api/medical/documents/:id/analyze","download":"GET /api/medical/documents/:id/download"},"chat":{"send_message":"POST /api/chat/documents/:document_id/chat","get_history":"GET /api/chat/documents/:document_id/chat","message_status":"GET /api/chat/messages/:message_id/status","cancel_message":"POST /api/chat/messages/:message_id/cancel","edit_message":"PUT /api/chat/messages/:message_id/edit"},"subscription":{"plans":"GET /api/subscription/plans","stripe_config":"GET /api/subscription/stripe/config","create_payment_intent":"POST /api/subscription/stripe/create-payment-intent","create_checkout_session":"POST /api/subscription/stripe/create-checkout-session","stripe_webhook":"POST /api/subscription/stripe/webhook","purchase":"POST /api/subscription/purchase","status":"GET /api/subscription/status","history":"GET /api/subscription/history","cancel":"POST /api/subscription/cancel/:subscriptionId","refund":"POST /api/subscription/refund/:subscriptionId"},"questionnaire":{"structure":"GET /api/questionnaire/structure","start":"POST /api/questionnaire/start","questions":"GET /api/questionnaire/categories/:categoryKey/questions","answer":"POST /api/questionnaire/answer","progress":"GET /api/questionnaire/sessions/:sessionId/progress","complete":"POST /api/questionnaire/complete","results":"GET /api/questionnaire/sessions/:sessionId/results","history":"GET /api/questionnaire/sessions","analyze":"POST /api/questionnaire/sessions/:sessionId/analyze","queueAnalysis":"POST /api/questionnaire/sessions/:sessionId/queue-analysis","sendMessage":"POST /api/questionnaire/sessions/:sessionId/chat","getChat":"GET /api/questionnaire/sessions/:sessionId/chat","cancelMessage":"POST /api/questionnaire/chat/messages/:messageId/cancel","editMessage":"PUT /api/questionnaire/chat/messages/:messageId/edit","pendingMessages":"GET /api/questionnaire/chat/pending","messageStatus":"GET /api/questionnaire/chat/messages/:messageId/status"}},"oauth_flow":{"code_exchange":{"step1":"Redirect user to GET /api/auth/google","step2":"User completes OAuth, gets redirected with temp code","step3":"Frontend calls POST /api/auth/google/exchange-code","security":"Temporary codes expire in 5 minutes, single-use"},"api_testing":{"note":"Use Accept: application/json header for Postman testing","endpoint":"GET /api/auth/google/callback?code=..."}},"best_practices":{"spa_apps":"Use Code Exchange flow only","api_testing":"Use Accept: application/json header","security":"Never expose JWT tokens in URLs, use temporary codes","documentation":"See OAUTH_BEST_PRACTICES.md for detailed guide"}}