{"openapi":"3.1.0","info":{"title":"Forever Moments Public API","version":"1.0.0","description":"Stable, public, read-only REST API for indexer-derived Forever Moments data."},"servers":[{"url":"/"}],"paths":{"/api/public/v1/collections":{"get":{"summary":"List collections","parameters":[{"name":"search","in":"query","schema":{"type":"string"}},{"name":"category","in":"query","schema":{"type":"string"}},{"name":"sortBy","in":"query","schema":{"type":"string","enum":["most-recent","oldest","most-moments","most-liked","alphabetical"]}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0}},{"name":"countOnly","in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Collections response"}}}},"/api/public/v1/collections/by-ids":{"post":{"summary":"Fetch collections by ids","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["collectionIds"],"properties":{"collectionIds":{"type":"array","items":{"type":"string"},"maxItems":200}}}}}},"responses":{"200":{"description":"Collections map response"}}}},"/api/public/v1/moments":{"get":{"summary":"List moments","parameters":[{"name":"search","in":"query","schema":{"type":"string"}},{"name":"sortBy","in":"query","schema":{"type":"string","enum":["most-recent","oldest","alphabetical","most-like-actions"]}},{"name":"owner","in":"query","schema":{"type":"string"}},{"name":"collectionId","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0}},{"name":"countOnly","in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Moments response"}}}},"/api/public/v1/moments/{momentId}":{"get":{"summary":"Get a moment by id","parameters":[{"name":"momentId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Moment detail response"}}}},"/api/public/v1/moments/{momentId}/likes":{"get":{"summary":"List likes for a moment","parameters":[{"name":"momentId","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"Likes response"}}}},"/api/public/v1/moments/{momentId}/comments":{"get":{"summary":"List comments for a moment","parameters":[{"name":"momentId","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0}},{"name":"refresh","in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Comments response"}}}},"/api/public/v1/profiles":{"get":{"summary":"Batch fetch basic profile cards","parameters":[{"name":"addresses","in":"query","required":true,"schema":{"type":"string","description":"Comma-separated addresses"}}],"responses":{"200":{"description":"Profiles map response"}}}},"/api/public/v1/profiles/{address}":{"get":{"summary":"Get a profile by address","parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Profile detail response"}}}},"/api/public/v1/profiles/{address}/moments":{"get":{"summary":"List moments owned by a profile","parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"Profile moments response"}}}},"/api/public/v1/marketplace/for-sale":{"get":{"summary":"List moments currently for sale","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"search","in":"query","schema":{"type":"string"}},{"name":"sortBy","in":"query","schema":{"type":"string","enum":["listed-recently","price-high-low","price-low-high"]}}],"responses":{"200":{"description":"Marketplace listings response"}}}},"/api/public/v1/likes/stats":{"get":{"summary":"Likes ecosystem statistics","responses":{"200":{"description":"Likes statistics response"}}}}}}