{"openapi":"3.0.0","paths":{"/api/v1/auth/me":{"get":{"operationId":"AuthController_getMe","parameters":[],"responses":{"200":{"description":""}}}},"/api/v1/auth/usage":{"get":{"operationId":"AuthController_getUsage","parameters":[],"responses":{"200":{"description":""}}}},"/api/v1/profiles":{"post":{"operationId":"ProfilesController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProfileDto"}}}},"responses":{"201":{"description":""}}},"get":{"operationId":"ProfilesController_findAll","parameters":[],"responses":{"200":{"description":""}}}},"/api/v1/profiles/links":{"get":{"operationId":"ProfilesController_getAllLinks","parameters":[],"responses":{"200":{"description":""}}},"post":{"operationId":"ProfilesController_createLink","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProfileLinkDto"}}}},"responses":{"201":{"description":""}}}},"/api/v1/profiles/links/history":{"get":{"operationId":"ProfilesController_getLinkHistory","parameters":[],"responses":{"200":{"description":""}}}},"/api/v1/profiles/links/{linkId}":{"delete":{"operationId":"ProfilesController_deleteLink","parameters":[{"name":"linkId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/api/v1/profiles/{id}":{"get":{"operationId":"ProfilesController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}},"patch":{"operationId":"ProfilesController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProfileDto"}}}},"responses":{"200":{"description":""}}},"delete":{"operationId":"ProfilesController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/api/v1/profiles/{id}/children":{"get":{"operationId":"ProfilesController_getChildren","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/api/v1/admin/feature-flags":{"get":{"operationId":"FeatureFlagsController_listAll","parameters":[],"responses":{"200":{"description":""}}}},"/api/v1/admin/feature-flags/{key}":{"get":{"operationId":"FeatureFlagsController_getOne","parameters":[{"name":"key","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}},"patch":{"operationId":"FeatureFlagsController_update","parameters":[{"name":"key","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/api/v1/platforms/{platform}/auth-url":{"get":{"operationId":"PlatformController_getAuthUrl","parameters":[{"name":"platform","required":true,"in":"path","schema":{"type":"string"}},{"name":"profileId","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/api/v1/platforms/{platform}/callback":{"get":{"operationId":"PlatformController_handleCallback","parameters":[{"name":"platform","required":true,"in":"path","schema":{"type":"string"}},{"name":"code","required":true,"in":"query","schema":{"type":"string"}},{"name":"state","required":true,"in":"query","schema":{"type":"string"}},{"name":"error","required":true,"in":"query","schema":{"type":"string"}},{"name":"error_description","required":true,"in":"query","schema":{"type":"string"}},{"name":"logid","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/api/v1/platforms/accounts":{"get":{"operationId":"PlatformController_listAccounts","parameters":[{"name":"profileId","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/api/v1/platforms/accounts/all":{"get":{"operationId":"PlatformController_listAllAccounts","parameters":[],"responses":{"200":{"description":""}}}},"/api/v1/platforms/facebook/pages":{"get":{"operationId":"PlatformController_listFacebookPages","parameters":[{"name":"profileId","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/api/v1/platforms/facebook/switch-page":{"post":{"operationId":"PlatformController_switchFacebookPage","parameters":[],"responses":{"201":{"description":""}}}},"/api/v1/platforms/accounts/{accountId}/health":{"get":{"operationId":"PlatformController_checkHealth","parameters":[{"name":"accountId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/api/v1/platforms/accounts/{accountId}":{"delete":{"operationId":"PlatformController_disconnectAccount","parameters":[{"name":"accountId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/api/v1/media/upload":{"post":{"operationId":"MediaController_upload","parameters":[],"responses":{"201":{"description":""}}}},"/api/v1/media/presign-upload":{"post":{"operationId":"MediaController_presignUpload","parameters":[],"responses":{"201":{"description":""}}}},"/api/v1/media/presign-upload/batch":{"post":{"operationId":"MediaController_presignUploadBatch","parameters":[],"responses":{"201":{"description":""}}}},"/api/v1/posts":{"post":{"operationId":"PostsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePostDto"}}}},"responses":{"201":{"description":""}}},"get":{"operationId":"PostsController_findAll","parameters":[{"name":"profileId","required":true,"in":"query","schema":{"type":"string"}},{"name":"limit","required":true,"in":"query","schema":{"type":"string"}},{"name":"cursor","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/api/v1/posts/fanout":{"post":{"operationId":"PostsController_createFanout","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFanoutPostDto"}}}},"responses":{"201":{"description":""}}}},"/api/v1/posts/stats":{"get":{"operationId":"PostsController_getStats","parameters":[{"name":"profileId","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/api/v1/posts/trash":{"get":{"operationId":"PostsController_listTrash","parameters":[{"name":"profileId","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/api/v1/posts/{id}":{"get":{"operationId":"PostsController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}},"patch":{"operationId":"PostsController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePostDto"}}}},"responses":{"200":{"description":""}}},"delete":{"operationId":"PostsController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/api/v1/posts/{id}/restore":{"post":{"operationId":"PostsController_restore","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}}}},"/api/v1/posts/{id}/status":{"get":{"operationId":"PostsController_getStatus","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/api/v1/posts/{id}/audit":{"get":{"operationId":"PostsController_getAuditLog","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/api/v1/posts/{id}/retry":{"post":{"operationId":"PostsController_retry","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}}}},"/api/v1/posts/bulk":{"post":{"operationId":"PostsController_bulkCreate","parameters":[],"responses":{"201":{"description":""}}}},"/api/v1/posts/optimize-captions":{"post":{"operationId":"PostsController_optimizeCaptions","parameters":[],"responses":{"201":{"description":""}}}},"/api/v1/posts/auto-schedule":{"post":{"operationId":"PostsController_autoSchedule","parameters":[],"responses":{"201":{"description":""}}}},"/api/v1/queue/process":{"post":{"operationId":"QueueController_processTask","parameters":[{"name":"x-cloudtasks-secret","required":true,"in":"header","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/api/v1/queue/submit/{postId}":{"post":{"operationId":"QueueController_submitPost","parameters":[{"name":"postId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}}}},"/api/v1/queue/cancel/{postId}":{"delete":{"operationId":"QueueController_cancelPost","parameters":[{"name":"postId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/api/v1/queue/status/{postId}":{"get":{"operationId":"QueueController_getStatus","parameters":[{"name":"postId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/api/v1/api-keys":{"post":{"operationId":"ApiKeysController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateApiKeyDto"}}}},"responses":{"201":{"description":""}}},"get":{"operationId":"ApiKeysController_list","parameters":[],"responses":{"200":{"description":""}}}},"/api/v1/api-keys/{id}":{"delete":{"operationId":"ApiKeysController_revoke","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/api/v1/webhooks":{"post":{"operationId":"WebhooksController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWebhookDto"}}}},"responses":{"201":{"description":""}}},"get":{"operationId":"WebhooksController_list","parameters":[],"responses":{"200":{"description":""}}}},"/api/v1/webhooks/{id}":{"delete":{"operationId":"WebhooksController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/api/v1/analytics/overview":{"get":{"operationId":"AnalyticsController_getOverview","parameters":[{"name":"profileId","required":true,"in":"query","schema":{"type":"string"}},{"name":"startDate","required":true,"in":"query","schema":{"type":"string"}},{"name":"endDate","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/api/v1/analytics/posts/{postId}":{"get":{"operationId":"AnalyticsController_getPostMetrics","parameters":[{"name":"postId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/api/v1/analytics/accounts":{"get":{"operationId":"AnalyticsController_getAccountMetrics","parameters":[],"responses":{"200":{"description":""}}}},"/api/v1/analytics/best-times":{"get":{"operationId":"AnalyticsController_getBestTimes","parameters":[{"name":"platform","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/api/v1/admin/stats":{"get":{"operationId":"AdminController_getStats","parameters":[],"responses":{"200":{"description":""}}}},"/api/v1/admin/queue":{"get":{"operationId":"AdminController_getQueue","parameters":[],"responses":{"200":{"description":""}}}},"/api/v1/admin/sync-metrics":{"post":{"operationId":"AdminController_syncMetrics","parameters":[],"responses":{"201":{"description":""}}}},"/api/v1/admin/email/test-welcome":{"post":{"operationId":"AdminController_testWelcomeEmail","parameters":[],"responses":{"201":{"description":""}}}},"/api/v1/admin/sync-metrics-cron":{"post":{"operationId":"AdminController_syncMetricsCron","parameters":[],"responses":{"201":{"description":""}}}},"/api/v1/billing/plans":{"get":{"operationId":"BillingController_getPlans","parameters":[],"responses":{"200":{"description":""}}}},"/api/v1/billing/status":{"get":{"operationId":"BillingController_getStatus","parameters":[],"responses":{"200":{"description":""}}}},"/api/v1/billing/subscription":{"patch":{"operationId":"BillingController_manageSubscription","parameters":[],"responses":{"200":{"description":""}}}},"/api/v1/billing/feedback":{"post":{"operationId":"BillingController_storeFeedback","parameters":[],"responses":{"204":{"description":""}}}},"/api/v1/billing/checkout":{"post":{"operationId":"BillingController_createCheckout","parameters":[],"responses":{"201":{"description":""}}}},"/api/v1/billing/portal":{"post":{"operationId":"BillingController_createPortal","parameters":[],"responses":{"201":{"description":""}}}},"/api/v1/billing/webhook":{"post":{"operationId":"BillingController_handleWebhook","parameters":[],"responses":{"201":{"description":""}}}},"/api/v1/wa/webhook":{"get":{"operationId":"WhatsAppController_verifyWebhook","parameters":[{"name":"hub.mode","required":true,"in":"query","schema":{"type":"string"}},{"name":"hub.verify_token","required":true,"in":"query","schema":{"type":"string"}},{"name":"hub.challenge","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}}},"post":{"operationId":"WhatsAppController_handleWebhook","parameters":[],"responses":{"200":{"description":""}}}},"/api/v1/wa/link-code":{"post":{"operationId":"WhatsAppController_generateLinkCode","parameters":[],"responses":{"201":{"description":""}}}},"/api/v1/wa/status":{"get":{"operationId":"WhatsAppController_getStatus","parameters":[],"responses":{"200":{"description":""}}}},"/api/v1/wa/link":{"delete":{"operationId":"WhatsAppController_unlink","parameters":[],"responses":{"200":{"description":""}}}},"/api/v1/team":{"get":{"operationId":"TeamController_listMembers","parameters":[],"responses":{"200":{"description":""}}}},"/api/v1/team/invite":{"post":{"operationId":"TeamController_inviteMember","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteMemberDto"}}}},"responses":{"201":{"description":""}}}},"/api/v1/team/{id}":{"patch":{"operationId":"TeamController_updateRole","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRoleDto"}}}},"responses":{"200":{"description":""}}},"delete":{"operationId":"TeamController_removeMember","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}}}},"/api/v1/support":{"post":{"operationId":"SupportController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTicketDto"}}}},"responses":{"201":{"description":""}}},"get":{"operationId":"SupportController_list","parameters":[],"responses":{"200":{"description":""}}}},"/api/v1/support/suggestions":{"get":{"operationId":"SupportController_listSuggestions","parameters":[],"responses":{"200":{"description":""}}}},"/api/v1/support/{id}":{"get":{"operationId":"SupportController_getOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}},"delete":{"operationId":"SupportController_deleteTicket","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/api/v1/support/{id}/messages":{"post":{"operationId":"SupportController_addMessage","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddMessageDto"}}}},"responses":{"201":{"description":""}}}},"/api/v1/support/{id}/status":{"patch":{"operationId":"SupportController_updateStatus","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateStatusDto"}}}},"responses":{"200":{"description":""}}}},"/api/v1/support/{id}/vote":{"post":{"operationId":"SupportController_vote","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}}},"delete":{"operationId":"SupportController_unvote","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/api/v1/status/components":{"get":{"operationId":"StatusController_getComponents","parameters":[],"responses":{"200":{"description":""}}}},"/api/v1/status/incidents/active":{"get":{"operationId":"StatusController_getActiveIncidents","parameters":[],"responses":{"200":{"description":""}}}},"/api/v1/status/incidents/recent":{"get":{"operationId":"StatusController_getRecentIncidents","parameters":[],"responses":{"200":{"description":""}}}},"/api/v1/status/uptime/{componentId}":{"get":{"operationId":"StatusController_getUptime","parameters":[{"name":"componentId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/api/v1/status/subscribe":{"post":{"operationId":"StatusController_subscribe","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscribeDto"}}}},"responses":{"201":{"description":""}}}},"/api/v1/status/admin/backfill-uptime":{"post":{"operationId":"StatusController_backfillUptime","parameters":[],"responses":{"201":{"description":""}}}},"/api/v1/status/admin/components":{"post":{"operationId":"StatusController_upsertComponent","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertComponentDto"}}}},"responses":{"201":{"description":""}}}},"/api/v1/status/admin/incidents":{"post":{"operationId":"StatusController_createIncident","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateIncidentDto"}}}},"responses":{"201":{"description":""}}}},"/api/v1/status/admin/incidents/{id}/updates":{"post":{"operationId":"StatusController_addIncidentUpdate","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddIncidentUpdateDto"}}}},"responses":{"201":{"description":""}}}},"/api/v1/status/admin/components/{id}/status":{"patch":{"operationId":"StatusController_setComponentStatus","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/api/v1/healthz/api":{"get":{"operationId":"HealthzController_checkApi","parameters":[],"responses":{"200":{"description":""}}}},"/api/v1/healthz/firestore":{"get":{"operationId":"HealthzController_checkFirestore","parameters":[],"responses":{"200":{"description":""}}}},"/api/v1/platform-invites":{"post":{"operationId":"PlatformInvitesController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateInviteDto"}}}},"responses":{"201":{"description":""}}},"get":{"operationId":"PlatformInvitesController_list","parameters":[],"responses":{"200":{"description":""}}}},"/api/v1/platform-invites/{id}":{"delete":{"operationId":"PlatformInvitesController_revoke","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}}}},"/api/v1/platform-invites/{token}/validate":{"get":{"operationId":"PlatformInvitesController_validate","parameters":[{"name":"token","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}},"/api/v1/platform-invites/{token}/connect":{"get":{"operationId":"PlatformInvitesController_connect","parameters":[{"name":"token","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}}}}},"info":{"title":"LetsPost API","description":"Unified social media management API — posts, profiles, analytics, webhooks.","version":"1.0","contact":{}},"tags":[],"servers":[],"components":{"securitySchemes":{"bearer":{"scheme":"bearer","bearerFormat":"JWT","type":"http"}},"schemas":{"CreateProfileDto":{"type":"object","properties":{}},"CreateProfileLinkDto":{"type":"object","properties":{}},"UpdateProfileDto":{"type":"object","properties":{}},"CreatePostDto":{"type":"object","properties":{}},"CreateFanoutPostDto":{"type":"object","properties":{}},"UpdatePostDto":{"type":"object","properties":{}},"CreateApiKeyDto":{"type":"object","properties":{}},"CreateWebhookDto":{"type":"object","properties":{}},"InviteMemberDto":{"type":"object","properties":{}},"UpdateRoleDto":{"type":"object","properties":{}},"CreateTicketDto":{"type":"object","properties":{}},"AddMessageDto":{"type":"object","properties":{}},"UpdateStatusDto":{"type":"object","properties":{}},"SubscribeDto":{"type":"object","properties":{}},"UpsertComponentDto":{"type":"object","properties":{}},"CreateIncidentDto":{"type":"object","properties":{}},"AddIncidentUpdateDto":{"type":"object","properties":{}},"CreateInviteDto":{"type":"object","properties":{}}}}}