{"openapi":"3.1.0","info":{"title":"HookGenerator API","description":"API para generar hooks virales para redes sociales","version":"2.0.0"},"paths":{"/api/v1/health":{"get":{"tags":["health"],"summary":"Health Check","operationId":"health_check_api_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}}}}},"/api/v1/auth/me":{"get":{"tags":["auth"],"summary":"Get Me","description":"Get current user info from Clerk session. Creates/updates local user record.","operationId":"get_me_api_v1_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/auth/sync":{"post":{"tags":["auth"],"summary":"Sync User","description":"Sync Clerk user data to local MongoDB.","operationId":"sync_user_api_v1_auth_sync_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/generate":{"post":{"tags":["generate"],"summary":"Generate Hooks","description":"Generate hooks. Auth optional but enables usage tracking.","operationId":"generate_hooks_api_v1_generate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/generate/post":{"post":{"tags":["generate"],"summary":"Generate Post","description":"Generate a complete viral post with hook, script, hashtags, CTA, and viral score.","operationId":"generate_post_api_v1_generate_post_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/generate/optimize":{"post":{"tags":["generate"],"summary":"Optimize Post","description":"Optimize existing post content considering audience metrics.","operationId":"optimize_post_api_v1_generate_optimize_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OptimizeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OptimizeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/generate/versions":{"post":{"tags":["generate"],"summary":"Generate Versions","description":"Generate post versions for multiple platforms.","operationId":"generate_versions_api_v1_generate_versions_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/post-types":{"get":{"tags":["generate"],"summary":"List Post Types","description":"List available content types.","operationId":"list_post_types_api_v1_post_types_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/platforms":{"get":{"tags":["generate"],"summary":"List Platforms","description":"List available platforms with specs.","operationId":"list_platforms_api_v1_platforms_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/providers":{"get":{"tags":["generate"],"summary":"List Providers","description":"List available LLM providers.","operationId":"list_providers_api_v1_providers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/providers/{provider}/models":{"get":{"tags":["generate"],"summary":"List Models","description":"List available models for a provider.","operationId":"list_models_api_v1_providers__provider__models_get","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}},{"name":"api_key","in":"query","required":true,"schema":{"type":"string","title":"Api Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/user/profile":{"get":{"tags":["user"],"summary":"Get Profile","description":"Get user profile.","operationId":"get_profile_api_v1_user_profile_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/user/usage":{"get":{"tags":["user"],"summary":"Get Usage","description":"Get current month usage.","operationId":"get_usage_api_v1_user_usage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/user/plans":{"get":{"tags":["user"],"summary":"List Plans","description":"List available plans.","operationId":"list_plans_api_v1_user_plans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/user/subscription/upgrade":{"post":{"tags":["user"],"summary":"Upgrade Plan","description":"Upgrade subscription (creates Stripe checkout).","operationId":"upgrade_plan_api_v1_user_subscription_upgrade_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"plan_id","in":"query","required":true,"schema":{"type":"string","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/stripe/checkout":{"post":{"tags":["stripe"],"summary":"Create Checkout Session","description":"Create Stripe checkout session.","operationId":"create_checkout_session_api_v1_stripe_checkout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/stripe/webhook":{"post":{"tags":["stripe"],"summary":"Stripe Webhook","description":"Handle Stripe webhooks.","operationId":"stripe_webhook_api_v1_stripe_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/stripe/portal":{"get":{"tags":["stripe"],"summary":"Customer Portal","description":"Create Stripe customer portal session.","operationId":"customer_portal_api_v1_stripe_portal_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/":{"get":{"tags":["root"],"summary":"Read Root","description":"Serve frontend or API root.","operationId":"read_root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/{path}":{"get":{"tags":["app"],"summary":"Serve Frontend","description":"Serve frontend routes with SPA fallback.","operationId":"serve_frontend__path__get","parameters":[{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"CheckoutRequest":{"properties":{"plan_id":{"type":"string","title":"Plan Id"},"success_url":{"type":"string","title":"Success Url","default":"http://localhost:8001"},"cancel_url":{"type":"string","title":"Cancel Url","default":"http://localhost:8001"}},"type":"object","required":["plan_id"],"title":"CheckoutRequest"},"GenerateRequest":{"properties":{"topic":{"type":"string","maxLength":200,"minLength":2,"title":"Topic","description":"Topic del post"},"count":{"type":"integer","maximum":10.0,"minimum":1.0,"title":"Count","description":"Número de hooks a generar","default":5},"provider":{"type":"string","title":"Provider","description":"Proveedor LLM (openai, gemini)","default":"openai"},"api_key":{"type":"string","title":"Api Key","description":"API key del proveedor","default":""},"model":{"type":"string","title":"Model","description":"Modelo a usar (si vacío, usa default)","default":""}},"type":"object","required":["topic"],"title":"GenerateRequest"},"GenerateResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"topic":{"type":"string","title":"Topic"},"hooks":{"items":{"type":"string"},"type":"array","title":"Hooks"},"count":{"type":"integer","title":"Count"},"styles_used":{"items":{"type":"string"},"type":"array","title":"Styles Used"}},"type":"object","required":["success","topic","hooks","count","styles_used"],"title":"GenerateResponse"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HealthResponse":{"properties":{"status":{"type":"string","title":"Status"},"version":{"type":"string","title":"Version"},"uptime":{"type":"integer","title":"Uptime"}},"type":"object","required":["status","version","uptime"],"title":"HealthResponse"},"OptimizeRequest":{"properties":{"post_content":{"type":"string","minLength":10,"title":"Post Content"},"platform":{"type":"string","title":"Platform","default":"instagram"},"tone":{"type":"string","title":"Tone","default":"conversational"},"language":{"type":"string","title":"Language","default":"es"},"followers_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Followers Count"},"avg_engagement":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Engagement"},"best_posting_times":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Best Posting Times"},"top_hashtags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Top Hashtags"},"provider":{"type":"string","title":"Provider","default":"openai"},"model":{"type":"string","title":"Model","default":""},"api_key":{"type":"string","title":"Api Key","default":""}},"type":"object","required":["post_content"],"title":"OptimizeRequest"},"OptimizeResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"hook":{"type":"string","title":"Hook"},"script":{"type":"string","title":"Script"},"hashtags":{"items":{"type":"string"},"type":"array","title":"Hashtags"},"cta":{"type":"string","title":"Cta"},"viralScore":{"type":"integer","title":"Viralscore"},"provider_used":{"type":"string","title":"Provider Used"},"model_used":{"type":"string","title":"Model Used"}},"type":"object","required":["success","hook","script","hashtags","cta","viralScore","provider_used","model_used"],"title":"OptimizeResponse"},"PostContent":{"properties":{"hook":{"type":"string","title":"Hook"},"script":{"type":"string","title":"Script"},"hashtags":{"items":{"type":"string"},"type":"array","title":"Hashtags"},"cta":{"type":"string","title":"Cta"},"viralScore":{"type":"integer","title":"Viralscore"}},"type":"object","required":["hook","script","hashtags","cta","viralScore"],"title":"PostContent"},"PostRequest":{"properties":{"topic":{"type":"string","maxLength":500,"minLength":2,"title":"Topic"},"type":{"type":"string","title":"Type","description":"PROBLEM_DRAMA|SOLUTION_WOW|SOCIAL_PROOF|TIPS_QUICK","default":"SOLUTION_WOW"},"platform":{"type":"string","title":"Platform","description":"facebook|twitter|linkedin|instagram|youtube|tiktok|pinterest","default":"instagram"},"tone":{"type":"string","title":"Tone","default":"conversational"},"language":{"type":"string","title":"Language","default":"es"},"provider":{"type":"string","title":"Provider","default":"openai"},"model":{"type":"string","title":"Model","default":""},"api_key":{"type":"string","title":"Api Key","default":""}},"type":"object","required":["topic"],"title":"PostRequest"},"PostResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"hook":{"type":"string","title":"Hook"},"script":{"type":"string","title":"Script"},"hashtags":{"items":{"type":"string"},"type":"array","title":"Hashtags"},"cta":{"type":"string","title":"Cta"},"viralScore":{"type":"integer","title":"Viralscore"},"provider_used":{"type":"string","title":"Provider Used"},"model_used":{"type":"string","title":"Model Used"}},"type":"object","required":["success","hook","script","hashtags","cta","viralScore","provider_used","model_used"],"title":"PostResponse"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VersionsRequest":{"properties":{"topic":{"type":"string","maxLength":500,"minLength":2,"title":"Topic"},"type":{"type":"string","title":"Type","default":"SOLUTION_WOW"},"platforms":{"items":{"type":"string"},"type":"array","title":"Platforms","default":["instagram","twitter","linkedin"]},"tone":{"type":"string","title":"Tone","default":"conversational"},"language":{"type":"string","title":"Language","default":"es"},"provider":{"type":"string","title":"Provider","default":"openai"},"model":{"type":"string","title":"Model","default":""},"api_key":{"type":"string","title":"Api Key","default":""}},"type":"object","required":["topic"],"title":"VersionsRequest"},"VersionsResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"versions":{"additionalProperties":{"$ref":"#/components/schemas/PostContent"},"type":"object","title":"Versions"}},"type":"object","required":["success","versions"],"title":"VersionsResponse"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}