{"openapi":"3.1.0","info":{"title":"GenticSprint Public API","description":"Read-only trend intelligence for AI agents. No auth required.","version":"0.2.0"},"paths":{"/health":{"get":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/trends/recent":{"get":{"summary":"Get Recent Trends","description":"Get recent trends with flexible filtering. Paginated.","operationId":"get_recent_trends_v1_trends_recent_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by category","title":"Category"},"description":"Filter by category"},{"name":"hours","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":2160,"minimum":1},{"type":"null"}],"description":"Trends from last N hours (1-2160; 2160 = 90 days)","title":"Hours"},"description":"Trends from last N hours (1-2160; 2160 = 90 days)"},{"name":"velocity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by velocity: emerging, accelerating, peak, declining","title":"Velocity"},"description":"Filter by velocity: emerging, accelerating, peak, declining"},{"name":"min_impact","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum business_impact_score (1-10)","title":"Min Impact"},"description":"Minimum business_impact_score (1-10)"},{"name":"min_quality","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum domain_quality_score (1.0-10.0)","title":"Min Quality"},"description":"Minimum domain_quality_score (1.0-10.0)"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/trends/{trend_id}":{"get":{"summary":"Get Trend Detail","description":"Get full trend detail with source lineage and citations.","operationId":"get_trend_detail_v1_trends__trend_id__get","parameters":[{"name":"trend_id","in":"path","required":true,"schema":{"type":"string","title":"Trend Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/search":{"get":{"summary":"Search Trends","description":"Full-text search across trend topics and summaries.","operationId":"search_trends_v1_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Search query","title":"Q"},"description":"Search query"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"time_window","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"1h, 24h, 7d, 30d","default":"7d","title":"Time Window"},"description":"1h, 24h, 7d, 30d"},{"name":"min_impact","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Impact"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/categories":{"get":{"summary":"List Categories","description":"List all categories with trend counts and velocity breakdown.","operationId":"list_categories_v1_categories_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sources/{domain}/trending":{"get":{"summary":"Get Source Trends","description":"Get trends originating from a specific domain.","operationId":"get_source_trends_v1_sources__domain__trending_get","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","title":"Domain"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/content/{trend_id}":{"get":{"summary":"Get Trend Content","description":"Retained cleaned article bodies for a trend.\n\nThis is the platform's core product artifact: the sanitised, PII-redacted\narticle body exactly as the fetch stage produced it. The response shape is\nIDENTICAL for anonymous and registered agents — registration differentiates\nquota and operations, not content. Bodies are only returned when they were\nactually retained; an empty list is reported as such rather than fabricated.","operationId":"get_trend_content_v1_content__trend_id__get","parameters":[{"name":"trend_id","in":"path","required":true,"schema":{"type":"string","title":"Trend Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/benefits":{"get":{"summary":"Get Benefits","description":"Anonymous aggregate benefit metrics.\n\nReports only measured values. Fields that are genuinely unmeasured stay\n``None`` (``null``) so clients can distinguish \"not observed\" from \"zero\".","operationId":"get_benefits_v1_benefits_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/stats":{"get":{"summary":"Get Stats","description":"Platform-level statistics.","operationId":"get_stats_v1_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"PaginatedResponse":{"properties":{"trends":{"items":{},"type":"array","title":"Trends"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"limit":{"type":"integer","title":"Limit"},"has_more":{"type":"boolean","title":"Has More"},"schema_version":{"type":"string","title":"Schema Version","default":"1.0"}},"type":"object","required":["trends","total","page","limit","has_more"],"title":"PaginatedResponse"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}