{"openapi":"3.0.0","paths":{"/health":{"get":{"operationId":"HealthController_check","parameters":[],"responses":{"200":{"description":""}},"tags":["Health"]}},"/auth/login":{"post":{"operationId":"AuthController_login","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"tags":["Auth"]}},"/auth/password":{"post":{"operationId":"AuthController_changePassword","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePasswordDto"}}}},"responses":{"200":{"description":""}},"tags":["Auth"]}},"/auth/google/exchange":{"post":{"operationId":"AuthController_googleExchange","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoogleExchangeDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"tags":["Auth"]}},"/auth/google":{"get":{"operationId":"AuthController_googleLogin","parameters":[],"responses":{"200":{"description":""}},"tags":["Auth"]}},"/auth/google/callback":{"get":{"operationId":"AuthController_googleCallback","parameters":[],"responses":{"200":{"description":""}},"tags":["Auth"]}},"/auth/github":{"get":{"operationId":"AuthController_githubLogin","parameters":[],"responses":{"200":{"description":""}},"tags":["Auth"]}},"/auth/github/callback":{"get":{"operationId":"AuthController_githubCallback","parameters":[],"responses":{"200":{"description":""}},"tags":["Auth"]}},"/auth/refresh":{"post":{"operationId":"AuthController_refreshToken","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshTokenDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"tags":["Auth"]}},"/auth/logout":{"post":{"operationId":"AuthController_logout","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogoutDto"}}}},"responses":{"200":{"description":""}},"tags":["Auth"]}},"/admin/allowlist":{"get":{"operationId":"AllowlistController_list","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AdminAllowlist"}}}}}},"security":[{"bearer":[]}],"tags":["Admin Allowlist"]},"post":{"operationId":"AllowlistController_add","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddAllowlistDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminAllowlist"}}}}},"security":[{"bearer":[]}],"tags":["Admin Allowlist"]}},"/admin/allowlist/{id}":{"delete":{"operationId":"AllowlistController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["Admin Allowlist"]}},"/users":{"get":{"operationId":"UserController_listUsers","parameters":[{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"page","required":true,"in":"query","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":true,"in":"query","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["User"]}},"/users/me":{"get":{"operationId":"UserController_getMe","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["User"]},"patch":{"operationId":"UserController_updateMe","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProfileDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}}}},"security":[{"bearer":[]}],"tags":["User"]}},"/users/me/avatar":{"post":{"operationId":"UserController_uploadAvatar","parameters":[],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary","description":"Avatar image (.png, .jpg, .jpeg, .webp) - max 5MB"}}}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}}}},"security":[{"bearer":[]}],"tags":["User"]},"delete":{"operationId":"UserController_deleteAvatar","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}}}},"security":[{"bearer":[]}],"tags":["User"]}},"/users/me/username":{"put":{"operationId":"UserController_changeUsername","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeUsernameDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}}}},"security":[{"bearer":[]}],"tags":["User"]}},"/users/check-username/{username}":{"get":{"operationId":"UserController_checkUsername","parameters":[{"name":"username","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["User"]}},"/users/{username}":{"get":{"operationId":"UserController_getByUsername","parameters":[{"name":"username","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"tags":["User"]}},"/users/me/deletion-request":{"post":{"operationId":"UserController_createDeletionRequest","parameters":[],"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeletionRequest"}}}}},"security":[{"bearer":[]}],"tags":["User"]},"get":{"operationId":"UserController_getDeletionRequestStatus","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"bearer":[]}],"tags":["User"]}},"/users/me/deletion-request/cancel":{"post":{"operationId":"UserController_cancelDeletionRequest","parameters":[],"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeletionRequest"}}}}},"security":[{"bearer":[]}],"tags":["User"]}},"/users/me/prompt-rule":{"get":{"operationId":"UserController_getPromptRule","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"bearer":[]}],"tags":["User"]},"put":{"operationId":"UserController_updatePromptRule","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePromptRuleDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPromptRule"}}}}},"security":[{"bearer":[]}],"tags":["User"]}},"/users/me/likes":{"get":{"operationId":"UserController_getMyLikes","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Content"}}}}}},"security":[{"bearer":[]}],"summary":"Get my liked contents","tags":["User"]}},"/users/me/bookmarks":{"get":{"operationId":"UserController_getMyBookmarks","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Content"}}}}}},"security":[{"bearer":[]}],"summary":"Get my bookmarked contents","tags":["User"]}},"/users/me/collections":{"get":{"operationId":"UserController_getMyCollections","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Collection"}}}}}},"security":[{"bearer":[]}],"summary":"Get my collections","tags":["User"]}},"/users/me/following":{"get":{"operationId":"UserController_getMyFollowing","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get the creators I follow","tags":["User"]}},"/creators/{username}/badge.svg":{"get":{"operationId":"BadgeController_badge","parameters":[{"name":"username","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"string"}}}}},"summary":"Embeddable \"Made with VP0\" creator badge (SVG)","tags":["Badge"]}},"/upload/code":{"post":{"operationId":"UploadController_uploadCode","parameters":[],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary","description":"Code file (.tsx, .ts, .jsx, .js) - max 500KB"}}}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"bearer":[]}],"tags":["Upload"]}},"/upload/image":{"post":{"operationId":"UploadController_uploadImage","parameters":[],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary","description":"Image file (.png, .jpg, .jpeg, .webp) - max 5MB"}}}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"bearer":[]}],"tags":["Upload"]}},"/upload/preview":{"post":{"operationId":"UploadController_uploadPreview","parameters":[{"name":"strict","required":false,"in":"query","description":"Enforce the 5:9 cover ratio (true for the card cover, false for gallery screenshots).","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary","description":"Preview image (.png, .jpg, .webp). Re-encoded to WebP/AVIF variants + lqip."}}}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"bearer":[]}],"tags":["Upload"]}},"/upload/video":{"post":{"operationId":"UploadController_uploadVideo","parameters":[],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary","description":"Video file (.mp4, .webm) - max 50MB"}}}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"bearer":[]}],"tags":["Upload"]}},"/contents/{id}/dwell":{"post":{"operationId":"ContentActionsController_recordDwell","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DwellDto"}}}},"responses":{"200":{"description":""}},"summary":"Record active dwell time on a content","tags":["Content Actions"]}},"/contents/{id}/like":{"post":{"operationId":"ContentActionsController_toggleLike","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Toggle like on a content","tags":["Content Actions"]}},"/contents/{id}/bookmark":{"post":{"operationId":"ContentActionsController_toggleBookmark","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Toggle bookmark on a content","tags":["Content Actions"]}},"/contents/{id}/actions/status":{"get":{"operationId":"ContentActionsController_getStatus","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get like and bookmark status for a content","tags":["Content Actions"]}},"/collections":{"post":{"operationId":"CollectionController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCollectionDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Collection"}}}}},"security":[{"bearer":[]}],"summary":"Create a new collection","tags":["Collections"]},"get":{"operationId":"CollectionController_findPublic","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Collection"}}}}}},"summary":"Get all public collections","tags":["Collections"]}},"/collections/{slug}":{"get":{"operationId":"CollectionController_findBySlug","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Collection"}}}}},"summary":"Get collection by slug","tags":["Collections"]}},"/collections/{slug}/suggestions":{"get":{"operationId":"CollectionController_suggestions","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Designs similar to this board (embedding centroid)","tags":["Collections"]}},"/collections/{id}":{"patch":{"operationId":"CollectionController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCollectionDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Collection"}}}}},"security":[{"bearer":[]}],"summary":"Update a collection","tags":["Collections"]},"delete":{"operationId":"CollectionController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Delete a collection","tags":["Collections"]}},"/collections/{id}/items":{"post":{"operationId":"CollectionController_addItem","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddCollectionItemDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CollectionItem"}}}}},"security":[{"bearer":[]}],"summary":"Add content to collection","tags":["Collections"]}},"/collections/{id}/items/{contentId}":{"delete":{"operationId":"CollectionController_removeItem","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"contentId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Remove content from collection","tags":["Collections"]}},"/collections/{id}/items/reorder":{"patch":{"operationId":"CollectionController_reorderItems","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReorderItemsDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Reorder items in collection","tags":["Collections"]}},"/collections/{id}/items/{contentId}/note":{"patch":{"operationId":"CollectionController_updateItemNote","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"contentId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CollectionItem"}}}}},"security":[{"bearer":[]}],"summary":"Set or clear the note on a board item","tags":["Collections"]}},"/collections/{id}/collaborators":{"get":{"operationId":"CollectionController_listCollaborators","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List board collaborators","tags":["Collections"]},"post":{"operationId":"CollectionController_addCollaborator","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Invite a collaborator by username (owner only)","tags":["Collections"]}},"/collections/{id}/collaborators/{userId}":{"delete":{"operationId":"CollectionController_removeCollaborator","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"userId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Remove a collaborator (owner) or leave (self)","tags":["Collections"]}},"/contents/feed/for-you":{"get":{"operationId":"RecommendationController_forYou","parameters":[{"name":"type","required":false,"in":"query","schema":{"type":"string","enum":["component","demo","template"]}},{"name":"kind","required":false,"in":"query","schema":{"type":"string"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"creator","required":false,"in":"query","schema":{"type":"string"}},{"name":"tag_ids","required":false,"in":"query","schema":{"type":"array","items":{"type":"number"}}},{"name":"tag_ids_all","required":false,"in":"query","schema":{"type":"array","items":{"type":"number"}}},{"name":"page","required":true,"in":"query","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":true,"in":"query","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}},{"name":"anon_id","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"summary":"Personalized For You feed","tags":["Recommendations"]}},"/contents/feed/explain/{id}":{"get":{"operationId":"RecommendationController_explain","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"anon_id","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"summary":"Explain how a design was ranked for this viewer","tags":["Recommendations"]}},"/contents/feed/rec-ops/join":{"post":{"operationId":"RecommendationController_join","parameters":[{"name":"window_min","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Run the impression↔outcome join immediately","tags":["Recommendations"]}},"/contents/feed/rec-ops/examples":{"get":{"operationId":"RecommendationController_examples","parameters":[{"name":"limit","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"type":"object"}}}}}},"security":[{"bearer":[]}],"summary":"Latest joined training examples","tags":["Recommendations"]}},"/contents/feed/rec-ops/embeddings/rebuild":{"post":{"operationId":"RecommendationController_rebuildEmbeddings","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Rebuild item embeddings (+ temporal recall eval)","tags":["Recommendations"]}},"/contents/feed/rec-ops/embeddings/neighbors/{id}":{"get":{"operationId":"RecommendationController_neighbors","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"type":"object"}}}}}},"security":[{"bearer":[]}],"summary":"Nearest co-engagement neighbors of a design","tags":["Recommendations"]}},"/contents/feed/rec-ops/channels":{"get":{"operationId":"RecommendationController_channels","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"type":"object"}}}}}},"security":[{"bearer":[]}],"summary":"Retrieval-channel win rates (30 days)","tags":["Recommendations"]}},"/contents/feed/rec-ops/train":{"post":{"operationId":"RecommendationController_train","parameters":[],"responses":{"201":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"bearer":[]}],"summary":"Train the learned value model on joined examples","tags":["Recommendations"]}},"/contents/feed/rec-ops/models":{"get":{"operationId":"RecommendationController_models","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"type":"object"}}}}}},"security":[{"bearer":[]}],"summary":"Trained model heads + holdout metrics","tags":["Recommendations"]}},"/contents/feed/rec-ops/ladder":{"get":{"operationId":"RecommendationController_ladder","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"type":"object"}}}}}},"security":[{"bearer":[]}],"summary":"Cold-start ladder board","tags":["Recommendations"]}},"/contents/feed/rec-ops/ladder/evaluate":{"post":{"operationId":"RecommendationController_ladderEvaluate","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Evaluate ladder tiers (enroll/promote/park)","tags":["Recommendations"]}},"/contents/feed/rec-ops/eval":{"get":{"operationId":"RecommendationController_eval","parameters":[{"name":"days","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"type":"object"}}}}}},"security":[{"bearer":[]}],"summary":"Per-ranker/variant funnel + NDCG from logged serves","tags":["Recommendations"]}},"/contents/feed/rec-ops/retention/derive":{"post":{"operationId":"RecommendationController_deriveRetention","parameters":[],"responses":{"201":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"bearer":[]}],"summary":"Derive ACTION_VALUES from session-return data","tags":["Recommendations"]}},"/contents/feed/rec-ops/retention":{"get":{"operationId":"RecommendationController_retention","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"bearer":[]}],"summary":"Active action values (retention-derived or defaults)","tags":["Recommendations"]}},"/contents/feed/rec-ops/experiments":{"get":{"operationId":"RecommendationController_experiments","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"type":"object"}}}}}},"security":[{"bearer":[]}],"summary":"Experiments: static vs effective treatment shares","tags":["Recommendations"]}},"/contents/feed/rec-ops/experiments/guard":{"post":{"operationId":"RecommendationController_guard","parameters":[],"responses":{"201":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"bearer":[]}],"summary":"Run the arm guardrail now (auto-kills a losing arm)","tags":["Recommendations"]}},"/contents/feed/rec-ops/experiments/{key}/treatment/{share}":{"post":{"operationId":"RecommendationController_setTreatment","parameters":[{"name":"key","required":true,"in":"path","schema":{"type":"string"}},{"name":"share","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Set an experiment treatment share (0..1)","tags":["Recommendations"]}},"/contents/feed/rec-ops/slot-curve":{"get":{"operationId":"RecommendationController_slotCurve","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Served/impressed/opened counts per feed position","tags":["Recommendations"]}},"/contents":{"post":{"operationId":"ContentController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateContentDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Content"}}}}},"security":[{"bearer":[]}],"tags":["Content"]},"get":{"operationId":"ContentController_findAll","parameters":[{"name":"type","required":false,"in":"query","schema":{"type":"string","enum":["component","demo","template"]}},{"name":"kind","required":false,"in":"query","schema":{"type":"string"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"creator","required":false,"in":"query","schema":{"type":"string"}},{"name":"tag_ids","required":false,"in":"query","schema":{"type":"array","items":{"type":"number"}}},{"name":"tag_ids_all","required":false,"in":"query","schema":{"type":"array","items":{"type":"number"}}},{"name":"page","required":true,"in":"query","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":true,"in":"query","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Content"]}},"/contents/me":{"get":{"operationId":"ContentController_findMyContents","parameters":[{"name":"type","required":false,"in":"query","schema":{"type":"string","enum":["component","demo","template"]}},{"name":"kind","required":false,"in":"query","schema":{"type":"string"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"creator","required":false,"in":"query","schema":{"type":"string"}},{"name":"tag_ids","required":false,"in":"query","schema":{"type":"array","items":{"type":"number"}}},{"name":"tag_ids_all","required":false,"in":"query","schema":{"type":"array","items":{"type":"number"}}},{"name":"page","required":true,"in":"query","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":true,"in":"query","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["Content"]}},"/contents/me/analytics":{"get":{"operationId":"ContentController_getMyAnalytics","parameters":[{"name":"days","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Creator analytics for the signed-in user","tags":["Content"]}},"/contents/{id}":{"patch":{"operationId":"ContentController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateContentDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Content"}}}}},"security":[{"bearer":[]}],"tags":["Content"]},"delete":{"operationId":"ContentController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["Content"]}},"/contents/{id}/versions":{"post":{"operationId":"ContentController_createVersion","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateVersionDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentVersion"}}}}},"security":[{"bearer":[]}],"tags":["Content"]},"get":{"operationId":"ContentController_getVersions","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ContentVersion"}}}}}},"tags":["Content"]}},"/contents/{slug}/remix":{"post":{"operationId":"ContentController_remix","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemixContentDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Save a remix of this design as a new draft","tags":["Content"]}},"/contents/{id}/submit-review":{"post":{"operationId":"ContentController_submitForReview","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["Content"]}},"/contents/{id}/files":{"get":{"operationId":"ContentController_getFiles","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DesignFile"}}}}}},"security":[{"bearer":[]}],"tags":["Content"]},"post":{"operationId":"ContentController_addFiles","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddFilesDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["Content"]}},"/contents/{id}/files/{fileId}":{"delete":{"operationId":"ContentController_removeFile","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"fileId","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["Content"]}},"/contents/{id}/preview":{"patch":{"operationId":"ContentController_updatePreview","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePreviewDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["Content"]}},"/contents/{id}/assets":{"get":{"operationId":"ContentController_getAssets","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DesignAsset"}}}}}},"security":[{"bearer":[]}],"tags":["Content"]},"post":{"operationId":"ContentController_addAssets","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddAssetsDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["Content"]}},"/contents/{id}/assets/{assetId}":{"delete":{"operationId":"ContentController_removeAsset","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"assetId","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["Content"]}},"/contents/{id}/components":{"put":{"operationId":"ContentController_setComponents","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetComponentsDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Set the curated components inside this design","tags":["Content"]}},"/contents/{id}/versions/{versionId}/ai-report":{"get":{"operationId":"ContentController_getVersionAiReport","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"versionId","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"bearer":[]}],"tags":["Content"]}},"/contents/{id}/analytics":{"get":{"operationId":"ContentController_getContentAnalytics","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"days","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Owner analytics for a single design","tags":["Content"]}},"/contents/{slug}":{"get":{"operationId":"ContentController_findBySlug","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Content"}}}}},"tags":["Content"]}},"/contents/{slug}/similar":{"get":{"operationId":"ContentController_findSimilar","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Content"}}}}}},"tags":["Content"]}},"/contents/{slug}/visually-similar":{"get":{"operationId":"ContentController_findVisuallySimilar","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Visually similar designs (ThumbHash nearest-neighbors)","tags":["Content"]}},"/contents/search/by-image":{"post":{"operationId":"ContentController_searchByImage","parameters":[],"responses":{"201":{"description":""}},"summary":"Find designs visually similar to an uploaded image","tags":["Content"]}},"/contents/{slug}/components":{"get":{"operationId":"ContentController_getComponents","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"type":"object"}}}}}},"summary":"Get the curated components inside this design","tags":["Content"]}},"/contents/{slug}/used-in":{"get":{"operationId":"ContentController_getUsedIn","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Content"}}}}}},"summary":"Get the app templates that use this component","tags":["Content"]}},"/contents/feed/screens":{"get":{"operationId":"ContentController_screens","parameters":[{"name":"page","required":false,"in":"query","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"string"}},{"name":"category_id","required":false,"in":"query","schema":{"type":"string"}},{"name":"q","required":false,"in":"query","schema":{"type":"string"}},{"name":"screen_type","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Screen pins — every captured screen of approved designs","tags":["Content"]}},"/contents/{slug}/share-video":{"get":{"operationId":"ContentController_shareVideo","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"TikTok-ready 9:16 clip URL for a live design","tags":["Content"]}},"/contents/feed/flows":{"get":{"operationId":"ContentController_flows","parameters":[{"name":"page","required":false,"in":"query","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"string"}},{"name":"category_id","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Designs with 3+ captured screens, for flow browsing","tags":["Content"]}},"/contents/feed/trending":{"get":{"operationId":"ContentController_trending","parameters":[{"name":"type","required":false,"in":"query","schema":{"type":"string","enum":["component","demo","template"]}},{"name":"kind","required":false,"in":"query","schema":{"type":"string"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"creator","required":false,"in":"query","schema":{"type":"string"}},{"name":"tag_ids","required":false,"in":"query","schema":{"type":"array","items":{"type":"number"}}},{"name":"tag_ids_all","required":false,"in":"query","schema":{"type":"array","items":{"type":"number"}}},{"name":"page","required":true,"in":"query","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":true,"in":"query","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Content"]}},"/contents/feed/following":{"get":{"operationId":"ContentController_following","parameters":[{"name":"type","required":false,"in":"query","schema":{"type":"string","enum":["component","demo","template"]}},{"name":"kind","required":false,"in":"query","schema":{"type":"string"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"creator","required":false,"in":"query","schema":{"type":"string"}},{"name":"tag_ids","required":false,"in":"query","schema":{"type":"array","items":{"type":"number"}}},{"name":"tag_ids_all","required":false,"in":"query","schema":{"type":"array","items":{"type":"number"}}},{"name":"page","required":true,"in":"query","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":true,"in":"query","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Feed of designs from creators you follow","tags":["Content"]}},"/contents/feed/featured":{"get":{"operationId":"ContentController_featured","parameters":[{"name":"type","required":false,"in":"query","schema":{"type":"string","enum":["component","demo","template"]}},{"name":"kind","required":false,"in":"query","schema":{"type":"string"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"creator","required":false,"in":"query","schema":{"type":"string"}},{"name":"tag_ids","required":false,"in":"query","schema":{"type":"array","items":{"type":"number"}}},{"name":"tag_ids_all","required":false,"in":"query","schema":{"type":"array","items":{"type":"number"}}},{"name":"page","required":true,"in":"query","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":true,"in":"query","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}}],"responses":{"200":{"description":""}},"summary":"Featured (admin-highlighted) designs for the hero rail","tags":["Content"]}},"/best/weeks":{"get":{"operationId":"BestController_weeks","parameters":[],"responses":{"200":{"description":""}},"summary":"Completed ISO weeks that have a Best chart","tags":["Best"]}},"/best/week/{week}":{"get":{"operationId":"BestController_week","parameters":[{"name":"week","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Best designs of one ISO week (e.g. 2026-W32)","tags":["Best"]}},"/best/month/{month}":{"get":{"operationId":"BestController_month","parameters":[{"name":"month","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Best designs of one month (e.g. 2026-07)","tags":["Best"]}},"/best/creators/{month}":{"get":{"operationId":"BestController_creators","parameters":[{"name":"month","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Monthly creators leaderboard","tags":["Best"]}},"/best/achievements/{contentId}":{"get":{"operationId":"BestController_achievements","parameters":[{"name":"contentId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Top-3 weekly finishes for one design (badge data)","tags":["Best"]}},"/moderation/queue":{"get":{"operationId":"ModerationController_findQueue","parameters":[{"name":"status","required":false,"in":"query","schema":{"type":"string","enum":["pending","approved","rejected","flagged"]}},{"name":"page","required":true,"in":"query","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":true,"in":"query","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["Moderation"]}},"/moderation/{versionId}":{"get":{"operationId":"ModerationController_getOne","parameters":[{"name":"versionId","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionModerationStatus"}}}}},"security":[{"bearer":[]}],"tags":["Moderation"]}},"/moderation/{versionId}/approve":{"post":{"operationId":"ModerationController_approve","parameters":[{"name":"versionId","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModerationActionDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["Moderation"]}},"/moderation/{versionId}/reject":{"post":{"operationId":"ModerationController_reject","parameters":[{"name":"versionId","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModerationActionDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["Moderation"]}},"/moderation/{versionId}/flag":{"post":{"operationId":"ModerationController_flag","parameters":[{"name":"versionId","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModerationActionDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["Moderation"]}},"/moderation/{versionId}/unflag":{"post":{"operationId":"ModerationController_unflag","parameters":[{"name":"versionId","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModerationActionDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["Moderation"]}},"/moderation/{versionId}/history":{"get":{"operationId":"ModerationController_getHistory","parameters":[{"name":"versionId","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ModerationAction"}}}}}},"security":[{"bearer":[]}],"tags":["Moderation"]}},"/moderation/{versionId}/files":{"get":{"operationId":"ModerationController_getFiles","parameters":[{"name":"versionId","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["Moderation"]}},"/moderation/{versionId}/preview-check":{"get":{"operationId":"ModerationController_previewCheck","parameters":[{"name":"versionId","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"bearer":[]}],"tags":["Moderation"]}},"/sandboxes/version/{versionId}":{"get":{"operationId":"SandboxController_findByVersion","parameters":[{"name":"versionId","required":true,"in":"path","schema":{"type":"number"}},{"name":"runtime_type","required":false,"in":"query","schema":{"enum":["web","react_native"],"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SandboxConfigResponseDto"}}}}},"tags":["Sandboxes"]}},"/sandboxes/{id}":{"delete":{"operationId":"SandboxController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["Sandboxes"]}},"/creators/directory":{"get":{"operationId":"FollowController_directory","parameters":[{"name":"page","required":false,"in":"query","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"summary":"Ranked public directory of creators with live designs","tags":["Creators"]}},"/creators/{id}/follow":{"post":{"operationId":"FollowController_follow","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"bearer":[]}],"summary":"Follow a creator","tags":["Creators"]},"delete":{"operationId":"FollowController_unfollow","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"bearer":[]}],"summary":"Unfollow a creator","tags":["Creators"]}},"/creators/{id}/follow-status":{"get":{"operationId":"FollowController_status","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"summary":"Get follow counts and the viewer follow state","tags":["Creators"]}},"/progress/me":{"get":{"operationId":"ProgressController_me","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"My XP, level, streak, and achievements","tags":["Progress"]}},"/progress/ping":{"post":{"operationId":"ProgressController_ping","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Count today as an active day (idempotent per UTC day)","tags":["Progress"]}},"/progress/today":{"get":{"operationId":"ProgressController_today","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Today's goals from the viewer's own actions (UTC day)","tags":["Progress"]}},"/creators/{username}/level":{"get":{"operationId":"CreatorLevelController_level","parameters":[{"name":"username","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"A creator's public level and XP","tags":["CreatorLevel"]}},"/admin/users/{id}/role":{"post":{"operationId":"AdminController_updateUserRole","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRoleDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["Admin"]}},"/admin/users":{"get":{"operationId":"AdminController_getUsers","parameters":[{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{}},{"name":"page","required":false,"in":"query","schema":{}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Paginated user/signup list with provider + activity","tags":["Admin"]}},"/admin/analytics/signups":{"get":{"operationId":"AdminController_getSignupsAnalytics","parameters":[{"name":"days","required":false,"in":"query","schema":{}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"bearer":[]}],"summary":"Daily signups series split by provider","tags":["Admin"]}},"/admin/analytics/performance":{"get":{"operationId":"AdminController_getPerformanceAnalytics","parameters":[{"name":"days","required":false,"in":"query","schema":{}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"What's performing best: design leaderboard + category rollups","tags":["Admin"]}},"/admin/analytics/timeseries":{"get":{"operationId":"AdminController_getTimeseriesAnalytics","parameters":[{"name":"metrics","required":false,"in":"query","schema":{"type":"string"}},{"name":"days","required":false,"in":"query","schema":{}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Daily series for views/installs/simRuns/saves/signups","tags":["Admin"]}},"/admin/integrity":{"get":{"operationId":"AdminController_getIntegrity","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Referential-integrity report (orphans/drift counts)","tags":["Admin"]}},"/admin/analytics":{"get":{"operationId":"AdminController_getAnalytics","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["Admin"]}},"/admin/analytics/dashboard":{"get":{"operationId":"AdminController_getDashboardAnalytics","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["Admin"]}},"/admin/analytics/fun":{"get":{"operationId":"AdminController_getFunAnalytics","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["Admin"]}},"/admin/reverify-live":{"post":{"operationId":"AdminController_reverifyLive","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Force re-capture + re-verify every live design","tags":["Admin"]}},"/admin/flush-manifest-cache":{"post":{"operationId":"AdminController_flushManifestCache","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Flush the manifest (design_bundles) cache","tags":["Admin"]}},"/admin/digests/send":{"post":{"operationId":"AdminController_sendDigests","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Send the weekly creator digest emails","tags":["Admin"]}},"/admin/digests/preview/{userId}":{"get":{"operationId":"AdminController_previewDigest","parameters":[{"name":"userId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Preview a creator digest (HTML, no send)","tags":["Admin"]}},"/admin/funnel":{"get":{"operationId":"AdminController_funnel","parameters":[{"name":"days","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Funnel: view → dwell → detail → sim → copy → install → remix → submit","tags":["Admin"]}},"/admin/insights/weekly":{"get":{"operationId":"AdminController_weeklyInsights","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Weekly insights: top movers, searches, funnel WoW","tags":["Admin"]}},"/admin/pipeline/stats":{"get":{"operationId":"AdminController_getPipelineStats","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["Admin"]}},"/admin/overview":{"get":{"operationId":"AdminController_getOverview","parameters":[{"name":"fresh","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin overview: attention, KPIs, sparklines, pipeline, recent actions","tags":["Admin"]}},"/admin/analytics/components/{id}":{"get":{"operationId":"AdminController_getComponentAnalytics","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["Admin"]}},"/admin/moderation-history":{"get":{"operationId":"AdminController_getModerationHistory","parameters":[{"name":"targetType","required":true,"in":"query","schema":{"type":"string"}},{"name":"targetId","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["Admin"]}},"/admin/audit":{"get":{"operationId":"AdminController_getAudit","parameters":[{"name":"page","required":false,"in":"query","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["Admin"]}},"/admin/creators":{"get":{"operationId":"AdminController_getCreators","parameters":[{"name":"page","required":false,"in":"query","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"string"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["Admin"]}},"/admin/creators/{id}":{"get":{"operationId":"AdminController_getCreator","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["Admin"]}},"/admin/creators/{id}/submissions":{"get":{"operationId":"AdminController_getCreatorSubmissions","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["Admin"]}},"/admin/creators/{id}/trust":{"post":{"operationId":"AdminController_setCreatorTrust","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["Admin"]}},"/admin/creators/{id}/warn":{"post":{"operationId":"AdminController_warnCreator","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["Admin"]}},"/admin/contents/{id}/feature":{"patch":{"operationId":"AdminController_setFeatured","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["Admin"]}},"/admin/contents/{id}/unpublish":{"post":{"operationId":"AdminController_unpublish","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["Admin"]}},"/admin/contents/{id}":{"delete":{"operationId":"AdminController_deleteContent","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["Admin"]}},"/tags":{"post":{"operationId":"TagController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTagDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tag"}}}}},"security":[{"bearer":[]}],"tags":["Tag"]},"get":{"operationId":"TagController_findAll","parameters":[{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"type","required":false,"in":"query","schema":{"type":"string"}},{"name":"page","required":true,"in":"query","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":true,"in":"query","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Tag"]}},"/tags/hubs/styles":{"get":{"operationId":"TagController_styleHubs","parameters":[],"responses":{"200":{"description":""}},"tags":["Tag"]}},"/tags/{id}":{"get":{"operationId":"TagController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tag"}}}}},"tags":["Tag"]},"patch":{"operationId":"TagController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTagDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tag"}}}}},"security":[{"bearer":[]}],"tags":["Tag"]},"delete":{"operationId":"TagController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["Tag"]}},"/tags/slug/{slug}":{"get":{"operationId":"TagController_findBySlug","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tag"}}}}},"tags":["Tag"]}},"/categories":{"get":{"operationId":"CategoryController_list","parameters":[],"responses":{"200":{"description":""}},"summary":"List iOS app categories with live design counts","tags":["Categories"]}},"/feedbacks":{"post":{"operationId":"FeedbackController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFeedbackDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Feedback"}}}}},"security":[{"bearer":[]}],"tags":["Feedback"]},"get":{"operationId":"FeedbackController_findAll","parameters":[{"name":"status","required":false,"in":"query","schema":{"type":"string","enum":["pending","approved","rejected"]}},{"name":"type","required":false,"in":"query","schema":{"type":"string","enum":["bug","feature","general"]}},{"name":"page","required":true,"in":"query","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":true,"in":"query","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["Feedback"]}},"/feedbacks/me":{"get":{"operationId":"FeedbackController_findMyFeedbacks","parameters":[{"name":"status","required":false,"in":"query","schema":{"type":"string","enum":["pending","approved","rejected"]}},{"name":"type","required":false,"in":"query","schema":{"type":"string","enum":["bug","feature","general"]}},{"name":"page","required":true,"in":"query","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":true,"in":"query","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["Feedback"]}},"/feedbacks/{id}":{"get":{"operationId":"FeedbackController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Feedback"}}}}},"security":[{"bearer":[]}],"tags":["Feedback"]},"delete":{"operationId":"FeedbackController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["Feedback"]}},"/feedbacks/{id}/status":{"patch":{"operationId":"FeedbackController_updateStatus","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateFeedbackStatusDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Feedback"}}}}},"security":[{"bearer":[]}],"tags":["Feedback"]}},"/admin/seed/status":{"get":{"operationId":"SeedController_status","parameters":[{"name":"x-seed-token","required":true,"in":"header","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"tags":["Seed"]}},"/admin/seed/run":{"post":{"operationId":"SeedController_run","parameters":[{"name":"x-seed-token","required":true,"in":"header","schema":{"type":"string"}}],"responses":{"201":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"tags":["Seed"]}},"/r/u/{username}/{slug}":{"get":{"operationId":"RegistryController_getComponent","parameters":[{"name":"username","required":true,"in":"path","schema":{"type":"string"}},{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Registry"]}},"/contents/{id}/report":{"post":{"operationId":"ReportController_report","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateReportDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentReport"}}}}},"security":[{"bearer":[]}],"tags":["Report"]}},"/reports/mine":{"get":{"operationId":"MyReportsController_mine","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["MyReports"]}},"/admin/reports":{"get":{"operationId":"AdminReportController_list","parameters":[{"name":"page","required":false,"in":"query","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","schema":{"type":"string"}},{"name":"contentId","required":false,"in":"query","schema":{"type":"string"}},{"name":"creatorId","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["AdminReport"]}},"/admin/reports/{id}":{"get":{"operationId":"AdminReportController_get","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentReport"}}}}},"security":[{"bearer":[]}],"tags":["AdminReport"]}},"/admin/reports/{id}/under-review":{"post":{"operationId":"AdminReportController_underReview","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentReport"}}}}},"security":[{"bearer":[]}],"tags":["AdminReport"]}},"/admin/reports/{id}/resolve":{"post":{"operationId":"AdminReportController_resolve","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveReportDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentReport"}}}}},"security":[{"bearer":[]}],"tags":["AdminReport"]}},"/me/api-keys":{"get":{"operationId":"ApiKeyController_list","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ApiKey"}}}}}},"security":[{"bearer":[]}],"tags":["ApiKey"]},"post":{"operationId":"ApiKeyController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateApiKeyDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["ApiKey"]}},"/me/api-keys/{id}":{"delete":{"operationId":"ApiKeyController_revoke","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["ApiKey"]}},"/v1/components":{"get":{"operationId":"PublicApiController_listComponents","parameters":[{"name":"type","required":false,"in":"query","schema":{"type":"string","enum":["component","demo","template"]}},{"name":"kind","required":false,"in":"query","schema":{"type":"string"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"creator","required":false,"in":"query","schema":{"type":"string"}},{"name":"tag_ids","required":false,"in":"query","schema":{"type":"array","items":{"type":"number"}}},{"name":"tag_ids_all","required":false,"in":"query","schema":{"type":"array","items":{"type":"number"}}},{"name":"page","required":true,"in":"query","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":true,"in":"query","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"api_key":[]}],"tags":["v1"]}},"/v1/components/{slug}":{"get":{"operationId":"PublicApiController_getComponent","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Content"}}}}},"security":[{"api_key":[]}],"tags":["v1"]}},"/v1/components/{slug}/versions":{"get":{"operationId":"PublicApiController_getVersions","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ContentVersion"}}}}}},"security":[{"api_key":[]}],"tags":["v1"]}},"/me/webhooks":{"get":{"operationId":"WebhookController_list","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Webhook"}}}}}},"security":[{"bearer":[]}],"tags":["Webhook"]},"post":{"operationId":"WebhookController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWebhookDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["Webhook"]}},"/me/webhooks/{id}/revoke":{"post":{"operationId":"WebhookController_revoke","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["Webhook"]}},"/me/webhooks/{id}":{"delete":{"operationId":"WebhookController_destroy","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["Webhook"]}},"/designs/{slug}/manifest":{"get":{"operationId":"SourceController_manifest","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}},{"name":"target","required":false,"in":"query","schema":{"type":"string"}},{"name":"version","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"tags":["Source"]}},"/designs/{slug}/raw":{"get":{"operationId":"SourceController_raw","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}},{"name":"path","required":false,"in":"query","schema":{"type":"string"}},{"name":"language","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"string"}}}}},"tags":["Source"]}},"/designs/{slug}/files":{"get":{"operationId":"SourceController_files","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Source"]}},"/designs/{slug}/bundle.zip":{"get":{"operationId":"SourceController_bundle","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}},{"name":"target","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Download the design as a zip bundle","tags":["Source"]}},"/registry.json":{"get":{"operationId":"RegistryController_index","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"summary":"Registry index of all published designs","tags":["Registry"]}},"/r/index.json":{"get":{"operationId":"RegistryController_indexAlias","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"tags":["Registry"]}},"/r/{slug}":{"get":{"operationId":"RegistryController_bundle","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}},{"name":"target","required":false,"in":"query","schema":{"type":"string"}},{"name":"version","required":false,"in":"query","schema":{"type":"string"}},{"name":"user-agent","required":true,"in":"header","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"summary":"vp0-bundle manifest (shadcn-style /r alias; supports @version pin)","tags":["Registry"]}},"/r/{slug}/{target}":{"get":{"operationId":"RegistryController_bundleForTarget","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}},{"name":"target","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"summary":"Single-target vp0-bundle manifest","tags":["Registry"]}},"/sandbox-bundle/{slug}":{"get":{"operationId":"RegistryController_sandboxBundle","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}},{"name":"target","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"summary":"Runnable RN bundle for the live preview sandbox","tags":["Registry"]}},"/dep-bundle":{"get":{"operationId":"RegistryController_depBundle","parameters":[{"name":"spec","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Browser ESM bundle for an npm dependency (live preview)","tags":["Registry"]}},"/export/{slug}/{flavor}":{"get":{"operationId":"RegistryController_exportProject","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}},{"name":"flavor","required":true,"in":"path","schema":{"type":"string"}},{"name":"user-agent","required":true,"in":"header","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Download a runnable Expo / Xcode project zip","tags":["Registry"]}},"/stats":{"get":{"operationId":"RegistryController_stats","parameters":[],"responses":{"200":{"description":""}},"summary":"Public platform stats (designs, creators, sim runs, installs)","tags":["Registry"]}},"/schema/vp0-bundle.v1.json":{"get":{"operationId":"RegistryController_schema","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"summary":"vp0-bundle.v1 JSON Schema","tags":["Registry"]}},"/mcp/server.json":{"get":{"operationId":"RegistryController_mcpServerJson","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"summary":"VP0 MCP server.json (self-hosted discovery)","tags":["Registry"]}},"/mcp.json":{"get":{"operationId":"RegistryController_mcpDiscovery","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"summary":"VP0 MCP discovery doc","tags":["Registry"]}},"/.well-known/mcp.json":{"get":{"operationId":"RegistryController_wellKnownMcp","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"tags":["Registry"]}},"/mcp":{"get":{"operationId":"McpRemoteController_handle_get","parameters":[],"responses":{"200":{"description":""}},"summary":"VP0 remote MCP endpoint (Streamable HTTP, stateless)","tags":["McpRemote"]},"post":{"operationId":"McpRemoteController_handle_post","parameters":[],"responses":{"200":{"description":""}},"summary":"VP0 remote MCP endpoint (Streamable HTTP, stateless)","tags":["McpRemote"]},"put":{"operationId":"McpRemoteController_handle_put","parameters":[],"responses":{"200":{"description":""}},"summary":"VP0 remote MCP endpoint (Streamable HTTP, stateless)","tags":["McpRemote"]},"delete":{"operationId":"McpRemoteController_handle_delete","parameters":[],"responses":{"200":{"description":""}},"summary":"VP0 remote MCP endpoint (Streamable HTTP, stateless)","tags":["McpRemote"]},"patch":{"operationId":"McpRemoteController_handle_patch","parameters":[],"responses":{"200":{"description":""}},"summary":"VP0 remote MCP endpoint (Streamable HTTP, stateless)","tags":["McpRemote"]},"options":{"operationId":"McpRemoteController_handle_options","parameters":[],"responses":{"200":{"description":""}},"summary":"VP0 remote MCP endpoint (Streamable HTTP, stateless)","tags":["McpRemote"]},"head":{"operationId":"McpRemoteController_handle_head","parameters":[],"responses":{"200":{"description":""}},"summary":"VP0 remote MCP endpoint (Streamable HTTP, stateless)","tags":["McpRemote"]},"search":{"operationId":"McpRemoteController_handle_search","parameters":[],"responses":{"200":{"description":""}},"summary":"VP0 remote MCP endpoint (Streamable HTTP, stateless)","tags":["McpRemote"]}},"/events/batch":{"post":{"operationId":"EventsController_ingest","parameters":[{"name":"user-agent","required":true,"in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IngestEventsDto"}}}},"responses":{"202":{"description":""}},"summary":"Ingest a batch of interaction events","tags":["Events"]}},"/events/identify":{"post":{"operationId":"EventsController_identify","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdentifyDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Claim anonymous history into the signed-in account","tags":["Events"]}},"/community/designs/{slug}/comments":{"get":{"operationId":"CommunityController_listComments","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Approved comments for a design (+ own pending)","tags":["Community"]}},"/community/designs/{slug}/showcase":{"get":{"operationId":"CommunityController_listShowcase","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Approved built-with-this entries (+ own pending)","tags":["Community"]}},"/community/designs/{id}/comments":{"post":{"operationId":"CommunityController_addComment","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Post a comment (pending until reviewed unless trusted)","tags":["Community"]}},"/community/comments/{id}":{"delete":{"operationId":"CommunityController_deleteComment","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Delete own comment (admins: any)","tags":["Community"]}},"/community/designs/{id}/showcase":{"post":{"operationId":"CommunityController_addShowcase","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Submit a built-with-this entry (pending until reviewed)","tags":["Community"]}},"/community/showcase/{id}":{"delete":{"operationId":"CommunityController_deleteShowcase","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Delete own showcase entry (admins: any)","tags":["Community"]}},"/community/admin/queue":{"get":{"operationId":"CommunityController_adminQueue","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Pending comments + showcase entries","tags":["Community"]}},"/community/admin/{kind}/{id}/approve":{"post":{"operationId":"CommunityController_approve","parameters":[{"name":"kind","required":true,"in":"path","schema":{"enum":["comment","showcase"],"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Approve a pending community item","tags":["Community"]}},"/community/admin/{kind}/{id}/reject":{"post":{"operationId":"CommunityController_reject","parameters":[{"name":"kind","required":true,"in":"path","schema":{"enum":["comment","showcase"],"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Reject a pending community item","tags":["Community"]}},"/challenges/current":{"get":{"operationId":"ChallengeController_current","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"summary":"This week's challenge with the live entries chart","tags":["Challenges"]}},"/challenges":{"get":{"operationId":"ChallengeController_list","parameters":[],"responses":{"200":{"description":""}},"summary":"All challenges, newest first, with top-3 entries","tags":["Challenges"]},"post":{"operationId":"ChallengeController_create","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Schedule a challenge (auto-creates its entry tag)","tags":["Challenges"]}},"/challenges/{week}":{"get":{"operationId":"ChallengeController_byWeek","parameters":[{"name":"week","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"One week's challenge + entries chart (frozen when closed)","tags":["Challenges"]}},"/challenges/{id}":{"delete":{"operationId":"ChallengeController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Delete a challenge (entries stay, they are normal uploads)","tags":["Challenges"]}}},"info":{"title":"Vp0 API","description":"The vp0 API description","version":"1.0","contact":{}},"tags":[{"name":"vp0","description":""}],"servers":[],"components":{"securitySchemes":{"bearer":{"scheme":"bearer","bearerFormat":"JWT","type":"http"}},"schemas":{"LoginDto":{"type":"object","properties":{}},"ChangePasswordDto":{"type":"object","properties":{}},"GoogleExchangeDto":{"type":"object","properties":{}},"RefreshTokenDto":{"type":"object","properties":{"refresh_token":{"type":"string","minLength":20,"maxLength":4096,"description":"A refresh token from /auth/login, an OAuth callback, or the previous /auth/refresh"}},"required":["refresh_token"]},"LogoutDto":{"type":"object","properties":{}},"AdminAllowlist":{"type":"object","properties":{"id":{"type":"number"},"value":{"type":"string"},"added_by":{"type":"string","nullable":true},"created_at":{"format":"date-time","type":"string"}},"required":["id","value","added_by","created_at"]},"AddAllowlistDto":{"type":"object","properties":{}},"UpdateProfileDto":{"type":"object","properties":{"name":{"type":"string","maxLength":80},"display_name":{"type":"string","maxLength":80},"image_url":{"type":"string","maxLength":500,"description":"https URL of an avatar image; prefer POST /users/me/avatar"},"bio":{"type":"string","maxLength":500},"twitter_url":{"type":"string","maxLength":300},"github_url":{"type":"string","maxLength":300},"website_url":{"type":"string","maxLength":300}}},"Permission":{"type":"object","properties":{"id":{"type":"number"},"code":{"type":"string"},"description":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"role_permissions":{"type":"array","items":{"$ref":"#/components/schemas/RolePermission"}}},"required":["id","code","description","created_at","role_permissions"]},"RolePermission":{"type":"object","properties":{"id":{"type":"number"},"role_id":{"type":"number"},"permission_id":{"type":"number"},"role":{"$ref":"#/components/schemas/Role"},"permission":{"$ref":"#/components/schemas/Permission"}},"required":["id","role_id","permission_id","role","permission"]},"Role":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"description":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"role_permissions":{"type":"array","items":{"$ref":"#/components/schemas/RolePermission"}},"user_roles":{"type":"array","items":{"$ref":"#/components/schemas/UserRole"}}},"required":["id","name","description","created_at","role_permissions","user_roles"]},"UserRole":{"type":"object","properties":{"id":{"type":"number"},"user_id":{"type":"string"},"role_id":{"type":"number"},"granted_by":{"type":"string"},"granted_at":{"format":"date-time","type":"string"},"expires_at":{"format":"date-time","type":"string"},"user":{"$ref":"#/components/schemas/User"},"role":{"$ref":"#/components/schemas/Role"}},"required":["id","user_id","role_id","granted_by","granted_at","expires_at","user","role"]},"ContentSlugHistory":{"type":"object","properties":{"id":{"type":"number"},"content_id":{"type":"string"},"slug":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"content":{"$ref":"#/components/schemas/Content"}},"required":["id","content_id","slug","created_at","content"]},"Package":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"registry":{"type":"string","enum":["npm","internal"]},"homepage_url":{"type":"string"},"is_blocked":{"type":"boolean"},"blocked_reason":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"version_dependencies":{"type":"array","items":{"$ref":"#/components/schemas/VersionDependency"}}},"required":["id","name","registry","homepage_url","is_blocked","blocked_reason","created_at","version_dependencies"]},"VersionDependency":{"type":"object","properties":{"id":{"type":"number"},"version_id":{"type":"number"},"package_id":{"type":"number"},"version_spec":{"type":"string"},"is_dev":{"type":"boolean"},"created_at":{"format":"date-time","type":"string"},"version":{"$ref":"#/components/schemas/ContentVersion"},"package":{"$ref":"#/components/schemas/Package"}},"required":["id","version_id","package_id","version_spec","is_dev","created_at","version","package"]},"InternalDependency":{"type":"object","properties":{"id":{"type":"number"},"version_id":{"type":"number"},"depends_on_content_id":{"type":"string"},"version_spec":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"version":{"$ref":"#/components/schemas/ContentVersion"},"depends_on_content":{"$ref":"#/components/schemas/Content"}},"required":["id","version_id","depends_on_content_id","version_spec","created_at","version","depends_on_content"]},"VersionDependenciesCache":{"type":"object","properties":{"id":{"type":"number"},"version_id":{"type":"number"},"npm_dependencies":{"type":"object","additionalProperties":{"type":"string"}},"npm_dev_dependencies":{"type":"object","additionalProperties":{"type":"string"}},"internal_dependencies":{"type":"array","items":{"type":"string"}},"updated_at":{"format":"date-time","type":"string"},"version":{"$ref":"#/components/schemas/ContentVersion"}},"required":["id","version_id","npm_dependencies","npm_dev_dependencies","internal_dependencies","updated_at","version"]},"ModerationAction":{"type":"object","properties":{"id":{"type":"number"},"version_id":{"type":"number"},"moderator_id":{"type":"string"},"action":{"enum":["submit","approve","reject","flag","unflag"],"type":"string"},"reason":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"version":{"$ref":"#/components/schemas/ContentVersion"},"moderator":{"$ref":"#/components/schemas/User"}},"required":["id","version_id","moderator_id","action","reason","created_at","version","moderator"]},"VersionModerationStatus":{"type":"object","properties":{"id":{"type":"number"},"version_id":{"type":"number"},"status":{"enum":["pending","approved","rejected","flagged"],"type":"string"},"last_action_id":{"type":"number"},"updated_at":{"format":"date-time","type":"string"},"version":{"$ref":"#/components/schemas/ContentVersion"},"last_action":{"$ref":"#/components/schemas/ModerationAction"}},"required":["id","version_id","status","last_action_id","updated_at","version","last_action"]},"SandboxMobileConfig":{"type":"object","properties":{"id":{"type":"number"},"sandbox_id":{"type":"number"},"platform":{"type":"string"},"min_os_version":{"type":"string"},"expo_sdk_version":{"type":"string"},"native_modules":{"type":"array","items":{"type":"string"}},"required_permissions":{"type":"array","items":{"type":"string"}},"simulator_device":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"sandbox":{"$ref":"#/components/schemas/Sandbox"}},"required":["id","sandbox_id","platform","min_os_version","expo_sdk_version","native_modules","required_permissions","simulator_device","created_at","sandbox"]},"Sandbox":{"type":"object","properties":{"id":{"type":"number"},"version_id":{"type":"number"},"runtime_type":{"type":"string","enum":["web","react_native"]},"runtime_version":{"type":"string"},"build_hash":{"type":"string"},"dependencies_lock":{"type":"object","additionalProperties":true},"sandbox_url":{"type":"string"},"sandbox_provider":{"type":"string"},"status":{"type":"string"},"build_logs_url":{"type":"string"},"build_started_at":{"format":"date-time","type":"string"},"build_completed_at":{"format":"date-time","type":"string"},"build_duration_ms":{"type":"number"},"created_at":{"format":"date-time","type":"string"},"version":{"$ref":"#/components/schemas/ContentVersion"},"mobile_config":{"$ref":"#/components/schemas/SandboxMobileConfig"}},"required":["id","version_id","runtime_type","runtime_version","build_hash","dependencies_lock","sandbox_url","sandbox_provider","status","build_logs_url","build_started_at","build_completed_at","build_duration_ms","created_at","version","mobile_config"]},"VersionEmbedding":{"type":"object","properties":{"id":{"type":"number"},"version_id":{"type":"number"},"embedding_type":{"type":"string"},"model":{"type":"string"},"embedding":{"type":"array","items":{"type":"number"}},"source_text":{"type":"string"},"is_active":{"type":"boolean"},"created_at":{"format":"date-time","type":"string"},"version":{"$ref":"#/components/schemas/ContentVersion"}},"required":["id","version_id","embedding_type","model","embedding","source_text","is_active","created_at","version"]},"ContentAnalytics":{"type":"object","properties":{"id":{"type":"number"},"content_id":{"type":"string"},"version_id":{"type":"number"},"date":{"format":"date-time","type":"string"},"view_count":{"type":"number"},"download_count":{"type":"number"},"copy_count":{"type":"number"},"dwell_seconds":{"type":"number"},"created_at":{"format":"date-time","type":"string"},"content":{"$ref":"#/components/schemas/Content"},"version":{"$ref":"#/components/schemas/ContentVersion"}},"required":["id","content_id","version_id","date","view_count","download_count","copy_count","dwell_seconds","created_at","content","version"]},"HuntRound":{"type":"object","properties":{"id":{"type":"number"},"year":{"type":"number"},"week_number":{"type":"number"},"category":{"type":"string","enum":["ui","marketing","seasonal","global"]},"seasonal_tag":{"type":"string"},"start_date":{"format":"date-time","type":"string"},"end_date":{"format":"date-time","type":"string"},"is_active":{"type":"boolean"},"created_at":{"format":"date-time","type":"string"},"entries":{"type":"array","items":{"$ref":"#/components/schemas/HuntEntry"}}},"required":["id","year","week_number","category","seasonal_tag","start_date","end_date","is_active","created_at","entries"]},"HuntVote":{"type":"object","properties":{"id":{"type":"number"},"entry_id":{"type":"number"},"user_id":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"entry":{"$ref":"#/components/schemas/HuntEntry"},"user":{"$ref":"#/components/schemas/User"}},"required":["id","entry_id","user_id","created_at","entry","user"]},"HuntEntry":{"type":"object","properties":{"id":{"type":"number"},"round_id":{"type":"number"},"version_id":{"type":"number"},"votes_count":{"type":"number"},"views_count":{"type":"number"},"installs_count":{"type":"number"},"final_score":{"type":"number"},"prize_tier":{"type":"number"},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","type":"string"},"round":{"$ref":"#/components/schemas/HuntRound"},"version":{"$ref":"#/components/schemas/ContentVersion"},"votes":{"type":"array","items":{"$ref":"#/components/schemas/HuntVote"}}},"required":["id","round_id","version_id","votes_count","views_count","installs_count","final_score","prize_tier","created_at","updated_at","round","version","votes"]},"AiGenerationRequest":{"type":"object","properties":{"id":{"type":"number"},"user_id":{"type":"string"},"search_query":{"type":"string"},"prompt":{"type":"string"},"result_url":{"type":"string"},"model":{"type":"string"},"tokens_used":{"type":"number"},"created_at":{"format":"date-time","type":"string"},"user":{"$ref":"#/components/schemas/User"},"content_usages":{"type":"array","items":{"$ref":"#/components/schemas/AiGenerationContentUsage"}}},"required":["id","user_id","search_query","prompt","result_url","model","tokens_used","created_at","user","content_usages"]},"AiGenerationContentUsage":{"type":"object","properties":{"id":{"type":"number"},"request_id":{"type":"number"},"version_id":{"type":"number"},"created_at":{"format":"date-time","type":"string"},"request":{"$ref":"#/components/schemas/AiGenerationRequest"},"version":{"$ref":"#/components/schemas/ContentVersion"}},"required":["id","request_id","version_id","created_at","request","version"]},"AiModerationReport":{"type":"object","properties":{"id":{"type":"number"},"version_id":{"type":"number"},"action_id":{"type":"number"},"score":{"type":"number"},"passed":{"type":"boolean"},"critical_issues":{"type":"object"},"warnings":{"type":"object"},"checks":{"type":"object"},"summary":{"type":"string"},"model":{"type":"string"},"tokens_used":{"type":"number"},"processing_time_ms":{"type":"number"},"created_at":{"format":"date-time","type":"string"},"version":{"$ref":"#/components/schemas/ContentVersion"},"action":{"$ref":"#/components/schemas/ModerationAction"}},"required":["id","version_id","action_id","score","passed","critical_issues","warnings","checks","summary","model","tokens_used","processing_time_ms","created_at","version","action"]},"ContentVersion":{"type":"object","properties":{"id":{"type":"number"},"content_id":{"type":"string"},"version_number":{"type":"number"},"code_url":{"type":"string"},"preview_url":{"type":"string"},"video_url":{"type":"string"},"changelog":{"type":"string"},"rebuild_score":{"type":"number","nullable":true},"rebuild_diff_url":{"type":"string","nullable":true},"rebuild_checked_at":{"format":"date-time","type":"string","nullable":true},"created_at":{"format":"date-time","type":"string"},"content":{"$ref":"#/components/schemas/Content"},"dependencies":{"type":"array","items":{"$ref":"#/components/schemas/VersionDependency"}},"internal_dependencies":{"type":"array","items":{"$ref":"#/components/schemas/InternalDependency"}},"dependencies_cache":{"$ref":"#/components/schemas/VersionDependenciesCache"},"moderation_actions":{"type":"array","items":{"$ref":"#/components/schemas/ModerationAction"}},"moderation_status":{"$ref":"#/components/schemas/VersionModerationStatus"},"sandboxes":{"type":"array","items":{"$ref":"#/components/schemas/Sandbox"}},"embeddings":{"type":"array","items":{"$ref":"#/components/schemas/VersionEmbedding"}},"analytics":{"type":"array","items":{"$ref":"#/components/schemas/ContentAnalytics"}},"hunt_entries":{"type":"array","items":{"$ref":"#/components/schemas/HuntEntry"}},"ai_generation_usages":{"type":"array","items":{"$ref":"#/components/schemas/AiGenerationContentUsage"}},"ai_moderation_reports":{"type":"array","items":{"$ref":"#/components/schemas/AiModerationReport"}}},"required":["id","content_id","version_number","code_url","preview_url","video_url","changelog","rebuild_score","rebuild_diff_url","rebuild_checked_at","created_at","content","dependencies","internal_dependencies","dependencies_cache","moderation_actions","moderation_status","sandboxes","embeddings","analytics","hunt_entries","ai_generation_usages","ai_moderation_reports"]},"ComponentDetail":{"type":"object","properties":{"id":{"type":"number"},"content_id":{"type":"string"},"registry":{"type":"string","enum":["ui","hooks","lib","blocks"]},"license":{"type":"string"},"tailwind_config_extension":{"type":"string"},"global_css_extension":{"type":"string"},"content":{"$ref":"#/components/schemas/Content"}},"required":["id","content_id","registry","license","tailwind_config_extension","global_css_extension","content"]},"DemoDetail":{"type":"object","properties":{"id":{"type":"number"},"content_id":{"type":"string"},"compiled_css_url":{"type":"string"},"bundle_url":{"type":"string"},"content":{"$ref":"#/components/schemas/Content"}},"required":["id","content_id","compiled_css_url","bundle_url","content"]},"TemplateDetail":{"type":"object","properties":{"id":{"type":"number"},"content_id":{"type":"string"},"github_url":{"type":"string","nullable":true},"demo_url":{"type":"string"},"page_count":{"type":"number"},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","type":"string"},"content":{"$ref":"#/components/schemas/Content"}},"required":["id","content_id","github_url","demo_url","page_count","created_at","updated_at","content"]},"Tag":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"slug":{"type":"string"},"tag_type":{"type":"string"},"sort_order":{"type":"number"},"is_active":{"type":"boolean"},"created_at":{"format":"date-time","type":"string"},"content_tags":{"type":"array","items":{"$ref":"#/components/schemas/ContentTag"}}},"required":["id","name","slug","tag_type","sort_order","is_active","created_at","content_tags"]},"ContentTag":{"type":"object","properties":{"id":{"type":"number"},"content_id":{"type":"string"},"tag_id":{"type":"number"},"created_at":{"format":"date-time","type":"string"},"content":{"$ref":"#/components/schemas/Content"},"tag":{"$ref":"#/components/schemas/Tag"}},"required":["id","content_id","tag_id","created_at","content","tag"]},"ContentLike":{"type":"object","properties":{"id":{"type":"number"},"user_id":{"type":"string"},"content_id":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"user":{"$ref":"#/components/schemas/User"},"content":{"$ref":"#/components/schemas/Content"}},"required":["id","user_id","content_id","created_at","user","content"]},"ContentBookmark":{"type":"object","properties":{"id":{"type":"number"},"user_id":{"type":"string"},"content_id":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"user":{"$ref":"#/components/schemas/User"},"content":{"$ref":"#/components/schemas/Content"}},"required":["id","user_id","content_id","created_at","user","content"]},"Collection":{"type":"object","properties":{"id":{"type":"string"},"user_id":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string"},"description":{"type":"string"},"is_public":{"type":"boolean"},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","type":"string"},"deleted_at":{"format":"date-time","type":"string"},"user":{"$ref":"#/components/schemas/User"},"items":{"type":"array","items":{"$ref":"#/components/schemas/CollectionItem"}}},"required":["id","user_id","name","slug","description","is_public","created_at","updated_at","deleted_at","user","items"]},"CollectionItem":{"type":"object","properties":{"id":{"type":"number"},"collection_id":{"type":"string"},"content_id":{"type":"string"},"position":{"type":"number"},"note":{"type":"string","nullable":true},"added_by":{"type":"string","nullable":true},"added_at":{"format":"date-time","type":"string"},"collection":{"$ref":"#/components/schemas/Collection"},"content":{"$ref":"#/components/schemas/Content"}},"required":["id","collection_id","content_id","position","note","added_by","added_at","collection","content"]},"Content":{"type":"object","properties":{"id":{"type":"string"},"type":{"enum":["component","demo","template"],"type":"string"},"kind":{"type":"string","nullable":true},"category_id":{"type":"number","nullable":true},"user_id":{"type":"string"},"parent_id":{"type":"string"},"remixed_from_id":{"type":"string","nullable":true},"name":{"type":"string"},"slug":{"type":"string"},"description":{"type":"string"},"latest_version_id":{"type":"number"},"likes_count":{"type":"number"},"downloads_count":{"type":"number"},"is_public":{"type":"boolean"},"is_featured":{"type":"boolean"},"source_token":{"type":"string","nullable":true},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","type":"string"},"deleted_at":{"format":"date-time","type":"string"},"deleted_by":{"type":"string"},"user":{"$ref":"#/components/schemas/User"},"parent":{"$ref":"#/components/schemas/Content"},"remixed_from":{"$ref":"#/components/schemas/Content"},"children":{"type":"array","items":{"$ref":"#/components/schemas/Content"}},"slug_history":{"type":"array","items":{"$ref":"#/components/schemas/ContentSlugHistory"}},"versions":{"type":"array","items":{"$ref":"#/components/schemas/ContentVersion"}},"component_detail":{"$ref":"#/components/schemas/ComponentDetail"},"demo_detail":{"$ref":"#/components/schemas/DemoDetail"},"template_detail":{"$ref":"#/components/schemas/TemplateDetail"},"content_tags":{"type":"array","items":{"$ref":"#/components/schemas/ContentTag"}},"likes":{"type":"array","items":{"$ref":"#/components/schemas/ContentLike"}},"bookmarks":{"type":"array","items":{"$ref":"#/components/schemas/ContentBookmark"}},"analytics":{"type":"array","items":{"$ref":"#/components/schemas/ContentAnalytics"}},"collection_items":{"type":"array","items":{"$ref":"#/components/schemas/CollectionItem"}}},"required":["id","type","kind","category_id","user_id","parent_id","remixed_from_id","name","slug","description","latest_version_id","likes_count","downloads_count","is_public","is_featured","source_token","created_at","updated_at","deleted_at","deleted_by","user","parent","remixed_from","children","slug_history","versions","component_detail","demo_detail","template_detail","content_tags","likes","bookmarks","analytics","collection_items"]},"ApiKey":{"type":"object","properties":{"id":{"type":"number"},"user_id":{"type":"string"},"key_hash":{"type":"string"},"key_prefix":{"type":"string"},"name":{"type":"string"},"is_active":{"type":"boolean"},"last_used_at":{"format":"date-time","type":"string"},"created_at":{"format":"date-time","type":"string"},"expires_at":{"format":"date-time","type":"string"},"user":{"$ref":"#/components/schemas/User"}},"required":["id","user_id","key_hash","key_prefix","name","is_active","last_used_at","created_at","expires_at","user"]},"UserPromptRule":{"type":"object","properties":{"id":{"type":"number"},"user_id":{"type":"string"},"tech_stack":{"type":"array","items":{"type":"string"}},"theme":{"type":"string"},"custom_context":{"type":"string"},"brand":{"type":"object","properties":{"appName":{"type":"string"},"primaryColor":{"type":"string"},"accentColor":{"type":"string"},"font":{"type":"string"}},"required":[]},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","type":"string"},"user":{"$ref":"#/components/schemas/User"}},"required":["id","user_id","tech_stack","theme","custom_context","brand","created_at","updated_at","user"]},"Feedback":{"type":"object","properties":{"id":{"type":"number"},"user_id":{"type":"string"},"type":{"enum":["bug","feature","general"],"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"status":{"enum":["pending","approved","rejected"],"type":"string"},"admin_response":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","type":"string"},"user":{"$ref":"#/components/schemas/User"}},"required":["id","user_id","type","title","description","status","admin_response","created_at","updated_at","user"]},"DeletionAuditLog":{"type":"object","properties":{"id":{"type":"number"},"request_id":{"type":"number"},"table_name":{"type":"string"},"record_count":{"type":"number"},"deleted_at":{"format":"date-time","type":"string"},"request":{"$ref":"#/components/schemas/DeletionRequest"}},"required":["id","request_id","table_name","record_count","deleted_at","request"]},"DeletionRequest":{"type":"object","properties":{"id":{"type":"number"},"user_id":{"type":"string"},"status":{"enum":["pending","processing","completed","cancelled"],"type":"string"},"requested_at":{"format":"date-time","type":"string"},"completed_at":{"format":"date-time","type":"string"},"user":{"$ref":"#/components/schemas/User"},"audit_logs":{"type":"array","items":{"$ref":"#/components/schemas/DeletionAuditLog"}}},"required":["id","user_id","status","requested_at","completed_at","user","audit_logs"]},"User":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string"},"username":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"display_name":{"type":"string","nullable":true},"password_hash":{"type":"string","nullable":true},"image_url":{"type":"string","nullable":true},"bio":{"type":"string","nullable":true},"twitter_url":{"type":"string","nullable":true},"github_url":{"type":"string","nullable":true},"website_url":{"type":"string","nullable":true},"google_id":{"type":"string","nullable":true},"github_id":{"type":"string","nullable":true},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","type":"string"},"deleted_at":{"format":"date-time","type":"string","nullable":true},"deleted_by":{"type":"string","nullable":true},"trust_status":{"type":"string","nullable":true},"trust_note":{"type":"string","nullable":true},"suspended_until":{"format":"date-time","type":"string","nullable":true},"warnings_count":{"type":"number"},"last_warned_at":{"format":"date-time","type":"string","nullable":true},"slug_history":{"type":"array","items":{"$ref":"#/components/schemas/UserSlugHistory"}},"user_roles":{"type":"array","items":{"$ref":"#/components/schemas/UserRole"}},"contents":{"type":"array","items":{"$ref":"#/components/schemas/Content"}},"content_likes":{"type":"array","items":{"$ref":"#/components/schemas/ContentLike"}},"content_bookmarks":{"type":"array","items":{"$ref":"#/components/schemas/ContentBookmark"}},"collections":{"type":"array","items":{"$ref":"#/components/schemas/Collection"}},"api_keys":{"type":"array","items":{"$ref":"#/components/schemas/ApiKey"}},"prompt_rule":{"$ref":"#/components/schemas/UserPromptRule"},"ai_generation_requests":{"type":"array","items":{"$ref":"#/components/schemas/AiGenerationRequest"}},"hunt_votes":{"type":"array","items":{"$ref":"#/components/schemas/HuntVote"}},"feedbacks":{"type":"array","items":{"$ref":"#/components/schemas/Feedback"}},"deletion_requests":{"type":"array","items":{"$ref":"#/components/schemas/DeletionRequest"}}},"required":["id","email","username","name","display_name","password_hash","image_url","bio","twitter_url","github_url","website_url","google_id","github_id","created_at","updated_at","deleted_at","deleted_by","trust_status","trust_note","suspended_until","warnings_count","last_warned_at","slug_history","user_roles","contents","content_likes","content_bookmarks","collections","api_keys","prompt_rule","ai_generation_requests","hunt_votes","feedbacks","deletion_requests"]},"UserSlugHistory":{"type":"object","properties":{"id":{"type":"number"},"user_id":{"type":"string"},"slug":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"user":{"$ref":"#/components/schemas/User"}},"required":["id","user_id","slug","created_at","user"]},"ChangeUsernameDto":{"type":"object","properties":{"username":{"type":"string","example":"jane_doe","description":"3–30 lowercase letters, digits or underscores","pattern":"^[a-z0-9_]{3,30}$"}},"required":["username"]},"BrandKitDto":{"type":"object","properties":{"appName":{"type":"string","maxLength":60},"primaryColor":{"type":"string"},"accentColor":{"type":"string"},"font":{"type":"string","maxLength":60}}},"UpdatePromptRuleDto":{"type":"object","properties":{"tech_stack":{"type":"array","items":{"type":"string"}},"theme":{"type":"string"},"custom_context":{"type":"string"},"brand":{"$ref":"#/components/schemas/BrandKitDto"}}},"DwellDto":{"type":"object","properties":{}},"CreateCollectionDto":{"type":"object","properties":{"name":{"type":"string","maxLength":100,"example":"My Favorite Components"},"description":{"type":"string","maxLength":500,"example":"A collection of my favorite UI components"},"is_public":{"type":"boolean","default":false}},"required":["name"]},"UpdateCollectionDto":{"type":"object","properties":{"name":{"type":"string","maxLength":100,"example":"My Favorite Components"},"description":{"type":"string","maxLength":500,"example":"A collection of my favorite UI components"},"is_public":{"type":"boolean","default":false}}},"AddCollectionItemDto":{"type":"object","properties":{"content_id":{"type":"string","format":"uuid","example":"550e8400-e29b-41d4-a716-446655440000"},"position":{"type":"number","minimum":0,"example":0,"description":"Position in collection (0 = first)"},"note":{"type":"string","maxLength":280,"example":"Love the onboarding progress ring","description":"Why I saved this — one line shown in the board view (Phase 9)"}},"required":["content_id"]},"ReorderItemsDto":{"type":"object","properties":{"content_ids":{"example":["uuid-1","uuid-2","uuid-3"],"description":"Content IDs in desired order","type":"array","items":{"type":"string","format":"uuid"}}},"required":["content_ids"]},"CreateAssetDto":{"type":"object","properties":{"url":{"type":"string"},"kind":{"type":"string"},"width":{"type":"number"},"height":{"type":"number"},"alt":{"type":"string"},"is_cover":{"type":"boolean"},"sort_order":{"type":"number"},"lqip":{"type":"string"},"variants":{"type":"object","additionalProperties":{"type":"string"}}},"required":["url"]},"CreateVersionFileDto":{"type":"object","properties":{"path":{"type":"string"},"target":{"type":"string"},"file_type":{"type":"string"},"code_url":{"type":"string"},"content_inline":{"type":"string"},"is_entrypoint":{"type":"boolean"},"sort_order":{"type":"number"}},"required":["path"]},"CreateVersionDto":{"type":"object","properties":{"code_url":{"type":"string"},"preview_url":{"type":"string"},"video_url":{"type":"string"},"changelog":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/CreateVersionFileDto"}}}},"CreateComponentDetailDto":{"type":"object","properties":{"registry":{"type":"string","enum":["ui","hooks","lib","blocks"]},"license":{"type":"string"},"tailwind_config_extension":{"type":"string"},"global_css_extension":{"type":"string"}},"required":["registry"]},"CreateDemoDetailDto":{"type":"object","properties":{"compiled_css_url":{"type":"string"},"bundle_url":{"type":"string"}}},"CreateTemplateDetailDto":{"type":"object","properties":{"github_url":{"type":"string","format":"uri"},"demo_url":{"type":"string","format":"uri"},"page_count":{"type":"number","minimum":1}}},"CreateContentDto":{"type":"object","properties":{"type":{"type":"string","enum":["component","demo","template"]},"kind":{"type":"string","enum":["app_template","screen","component"]},"category_id":{"type":"number"},"name":{"type":"string"},"description":{"type":"string"},"parent_id":{"type":"string","format":"uuid"},"is_public":{"type":"boolean"},"is_draft":{"type":"boolean"},"assets":{"type":"array","items":{"$ref":"#/components/schemas/CreateAssetDto"}},"tag_ids":{"type":"array","items":{"type":"number"}},"version":{"$ref":"#/components/schemas/CreateVersionDto"},"component_detail":{"$ref":"#/components/schemas/CreateComponentDetailDto"},"demo_detail":{"$ref":"#/components/schemas/CreateDemoDetailDto"},"template_detail":{"$ref":"#/components/schemas/CreateTemplateDetailDto"}},"required":["type","name","version"]},"UpdateContentDto":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"is_public":{"type":"boolean"},"category_id":{"type":"number"},"tag_ids":{"type":"array","items":{"type":"number"}}}},"RemixContentDto":{"type":"object","properties":{"name":{"type":"string","maxLength":120},"files":{"type":"array","items":{"$ref":"#/components/schemas/CreateVersionFileDto"}}}},"DesignFile":{"type":"object","properties":{"id":{"type":"number"},"version_id":{"type":"number"},"target":{"type":"string"},"path":{"type":"string"},"file_name":{"type":"string"},"file_type":{"type":"string"},"content_url":{"type":"string","nullable":true},"content_inline":{"type":"string","nullable":true},"content_hash":{"type":"string","nullable":true},"sort_order":{"type":"number"},"is_entrypoint":{"type":"boolean"},"created_at":{"format":"date-time","type":"string"},"version":{"$ref":"#/components/schemas/ContentVersion"}},"required":["id","version_id","target","path","file_name","file_type","content_url","content_inline","content_hash","sort_order","is_entrypoint","created_at","version"]},"AddFilesDto":{"type":"object","properties":{"files":{"type":"array","items":{"$ref":"#/components/schemas/CreateVersionFileDto"}}},"required":["files"]},"UpdatePreviewDto":{"type":"object","properties":{"preview_url":{"type":"string"},"video_url":{"type":"string"}}},"DesignAsset":{"type":"object","properties":{"id":{"type":"number"},"content_id":{"type":"string"},"kind":{"type":"string"},"url":{"type":"string"},"width":{"type":"number","nullable":true},"height":{"type":"number","nullable":true},"alt":{"type":"string","nullable":true},"is_cover":{"type":"boolean"},"sort_order":{"type":"number"},"lqip":{"type":"string","nullable":true},"phash":{"type":"string","nullable":true},"variants":{"type":"object","additionalProperties":{"type":"string"},"nullable":true},"meta":{"type":"object","properties":{"tap":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"selfRequired":false}},"required":["tap"]},"created_at":{"format":"date-time","type":"string"},"content":{"$ref":"#/components/schemas/Content"}},"required":["id","content_id","kind","url","width","height","alt","is_cover","sort_order","lqip","phash","variants","meta","created_at","content"]},"AddAssetsDto":{"type":"object","properties":{"assets":{"type":"array","items":{"$ref":"#/components/schemas/CreateAssetDto"}}},"required":["assets"]},"ComponentRefDto":{"type":"object","properties":{"component_content_id":{"type":"string","format":"uuid"},"label":{"type":"string","maxLength":80},"relationship_type":{"type":"string","enum":["uses","screen_of","variant_of"]},"sort_order":{"type":"number","minimum":0}},"required":["component_content_id"]},"SetComponentsDto":{"type":"object","properties":{"components":{"type":"array","items":{"$ref":"#/components/schemas/ComponentRefDto"}}},"required":["components"]},"ModerationActionDto":{"type":"object","properties":{"reason":{"type":"string"}}},"MobileConfigResponse":{"type":"object","properties":{"platform":{"type":"string"},"expo_sdk_version":{"type":"string"},"native_modules":{"type":"array","items":{"type":"string"}},"required_permissions":{"type":"array","items":{"type":"string"}}}},"ContentMetadata":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"},"description":{"type":"string"}},"required":["id","name","type"]},"SandboxConfigResponseDto":{"type":"object","properties":{"id":{"type":"number"},"status":{"type":"string"},"runtime_type":{"type":"string"},"runtime_version":{"type":"string"},"template_type":{"type":"string"},"sandbox_provider":{"type":"string"},"sandbox_url":{"type":"string"},"code_url":{"type":"string"},"dependencies":{"type":"object","additionalProperties":{"type":"string"}},"devDependencies":{"type":"object","additionalProperties":{"type":"string"}},"tailwind_config_extension":{"type":"string"},"global_css_extension":{"type":"string"},"mobile_config":{"$ref":"#/components/schemas/MobileConfigResponse"},"content":{"$ref":"#/components/schemas/ContentMetadata"}},"required":["id","status","runtime_type","sandbox_provider","code_url","dependencies","devDependencies","content"]},"UpdateRoleDto":{"type":"object","properties":{"role":{"type":"string","enum":["admin","moderator","creator","user"]}},"required":["role"]},"CreateTagDto":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]},"UpdateTagDto":{"type":"object","properties":{"name":{"type":"string"}}},"CreateFeedbackDto":{"type":"object","properties":{"type":{"type":"string","enum":["bug","feature","general"]},"title":{"type":"string"},"description":{"type":"string"}},"required":["type","title","description"]},"UpdateFeedbackStatusDto":{"type":"object","properties":{"status":{"type":"string","enum":["pending","approved","rejected"]},"admin_response":{"type":"string"}},"required":["status"]},"CreateReportDto":{"type":"object","properties":{}},"ContentReport":{"type":"object","properties":{"id":{"type":"string"},"content_id":{"type":"string"},"reporter_id":{"type":"string","nullable":true},"reason":{"enum":["SPAM","HARASSMENT","COPYRIGHT","NSFW","LOW_QUALITY","BROKEN","SECURITY","OTHER"],"type":"string"},"details":{"type":"string","nullable":true},"status":{"enum":["OPEN","UNDER_REVIEW","RESOLVED","DISMISSED"],"type":"string"},"resolved_by_id":{"type":"string","nullable":true},"resolution_note":{"type":"string","nullable":true},"resolved_at":{"format":"date-time","type":"string","nullable":true},"created_at":{"format":"date-time","type":"string"},"content":{"$ref":"#/components/schemas/Content"},"reporter":{"nullable":true,"type":"object","allOf":[{"$ref":"#/components/schemas/User"}]},"resolved_by":{"nullable":true,"type":"object","allOf":[{"$ref":"#/components/schemas/User"}]}},"required":["id","content_id","reporter_id","reason","details","status","resolved_by_id","resolution_note","resolved_at","created_at","content","reporter","resolved_by"]},"ResolveReportDto":{"type":"object","properties":{}},"CreateApiKeyDto":{"type":"object","properties":{}},"Webhook":{"type":"object","properties":{"id":{"type":"string"},"user_id":{"type":"string"},"url":{"type":"string"},"secret":{"type":"string"},"name":{"type":"string","nullable":true},"events":{"type":"array","items":{"type":"string","enum":["component.approved","component.rejected","component.submitted"]}},"is_active":{"type":"boolean"},"last_status":{"type":"number","nullable":true},"last_error":{"type":"string","nullable":true},"last_attempt_at":{"format":"date-time","type":"string","nullable":true},"failure_count":{"type":"number"},"created_at":{"format":"date-time","type":"string"},"updated_at":{"format":"date-time","type":"string"},"user":{"$ref":"#/components/schemas/User"}},"required":["id","user_id","url","secret","name","events","is_active","last_status","last_error","last_attempt_at","failure_count","created_at","updated_at","user"]},"CreateWebhookDto":{"type":"object","properties":{}},"IngestEventDto":{"type":"object","properties":{"event_type":{"type":"string","maxLength":32},"content_id":{"type":"string","maxLength":64},"surface":{"type":"string","maxLength":32},"position":{"type":"number","minimum":0,"maximum":100000},"dwell_ms":{"type":"number","minimum":0,"maximum":600000},"value":{"type":"number"},"metadata":{"type":"object","additionalProperties":true},"client_ts":{"type":"number"}},"required":["event_type"]},"IngestEventsDto":{"type":"object","properties":{"anon_id":{"type":"string","maxLength":64},"session_id":{"type":"string","maxLength":64},"events":{"type":"array","items":{"$ref":"#/components/schemas/IngestEventDto"}}},"required":["events"]},"IdentifyDto":{"type":"object","properties":{"anon_id":{"type":"string","maxLength":64}},"required":["anon_id"]}}}}