{"openapi":"3.1.1","info":{"title":"AI Investing Directory API","version":"1.0.0","description":"Read-only project discovery. No trading, credentials, or personalized investment advice."},"servers":[{"url":"https://aiinvestmap.com"}],"paths":{"/api/v1/projects":{"get":{"operationId":"searchProjects","description":"OR within dimensions, AND across dimensions. Unknown fields never match explicit known requirements. Same-version responses have the same order as the website.","parameters":[{"name":"q","in":"query","schema":{"type":"string","maxLength":128,"description":"NFKC normalized, case insensitive, at most 8 whitespace-separated terms; all terms must match."}},{"name":"market","in":"query","style":"form","explode":false,"schema":{"type":"array","items":{"enum":["cn_a","hk","us","crypto","global","other"]}}},{"name":"category","in":"query","style":"form","explode":false,"schema":{"type":"array","items":{"enum":["ai_project","broker_skill","quant_tool"]}}},{"name":"coding_required","in":"query","schema":{"type":"boolean"}},{"name":"usage_mode","in":"query","style":"form","explode":false,"schema":{"type":"array","items":{"enum":["hosted","self_hosted"]}}},{"name":"cost_model","in":"query","style":"form","explode":false,"schema":{"type":"array","items":{"enum":["free","paid","usage_based","mixed","unknown"]}}},{"name":"locale","in":"query","schema":{"enum":["zh","en","ja"],"default":"en"}},{"name":"sort","in":"query","schema":{"enum":["imported_at_desc","github_stars_desc","relevance","verified_at_desc"],"default":"imported_at_desc"}},{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"maximum":1000000,"default":1}},{"name":"page_size","in":"query","schema":{"type":"integer","enum":[10,20,50],"default":20}}],"responses":{"200":{"description":"Matching published projects, including zero results.","content":{"application/json":{"schema":{"type":"object","required":["items","total","page","page_size","data_version"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Project"}},"total":{"type":"integer"},"page":{"type":"integer"},"page_size":{"enum":[10,20,50]},"data_version":{"type":"string"}}}}}},"400":{"description":"Request error. No credentials or database details are returned.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Request error. No credentials or database details are returned.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"410":{"description":"Request error. No credentials or database details are returned.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"429":{"description":"Request error. No credentials or database details are returned.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"500":{"description":"Request error. No credentials or database details are returned.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"503":{"description":"Request error. No credentials or database details are returned.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v1/projects/{id}":{"get":{"operationId":"getProject","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Stable project UUID. Slugs are also accepted for page resolution."},{"name":"locale","in":"query","schema":{"enum":["zh","en","ja"],"default":"en"}}],"responses":{"200":{"description":"Public project details.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"400":{"description":"Request error. No credentials or database details are returned.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Request error. No credentials or database details are returned.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"410":{"description":"Request error. No credentials or database details are returned.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"429":{"description":"Request error. No credentials or database details are returned.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"500":{"description":"Request error. No credentials or database details are returned.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"503":{"description":"Request error. No credentials or database details are returned.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v1/projects/{id}/markdown":{"get":{"operationId":"getProjectMarkdown","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Stable project UUID. Slugs are also accepted for page resolution."},{"name":"locale","in":"query","schema":{"enum":["zh","en","ja"],"default":"en"}}],"responses":{"200":{"description":"The same project version as JSON, in Markdown.","content":{"text/markdown":{"schema":{"type":"string"}}}},"400":{"description":"Request error. No credentials or database details are returned.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Request error. No credentials or database details are returned.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"410":{"description":"Request error. No credentials or database details are returned.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"429":{"description":"Request error. No credentials or database details are returned.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"500":{"description":"Request error. No credentials or database details are returned.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"503":{"description":"Request error. No credentials or database details are returned.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v1/facets":{"get":{"operationId":"getFacets","parameters":[{"name":"locale","in":"query","schema":{"enum":["zh","en","ja"],"default":"en"}}],"responses":{"200":{"description":"Stable filtering values and localized labels.","content":{"application/json":{"schema":{"type":"object","properties":{"locales":{"type":"array","items":{"enum":["zh","en","ja"]}},"categories":{"type":"array","items":{"enum":["ai_project","broker_skill","quant_tool"]}},"markets":{"type":"array","items":{"enum":["cn_a","hk","us","crypto","global","other"]}},"usage_modes":{"type":"array","items":{"type":"string"}},"cost_models":{"type":"array","items":{"enum":["free","paid","usage_based","mixed","unknown"]}},"labels":{"type":"object"}}}}}},"400":{"description":"Request error. No credentials or database details are returned.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Request error. No credentials or database details are returned.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"410":{"description":"Request error. No credentials or database details are returned.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"429":{"description":"Request error. No credentials or database details are returned.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"500":{"description":"Request error. No credentials or database details are returned.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"503":{"description":"Request error. No credentials or database details are returned.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}}},"components":{"schemas":{"Project":{"type":"object","required":["id","slug","name","summary","status","category","content_locale","available_locales","detail_url","data_version"],"properties":{"id":{"type":"string","format":"uuid"},"slug":{"type":"string"},"name":{"type":"string"},"summary":{"type":"string"},"description":{"type":"string"},"status":{"enum":["published","withdrawn"]},"category":{"enum":["ai_project","broker_skill","quant_tool"]},"markets":{"type":["array","null"],"items":{"enum":["cn_a","hk","us","crypto","global","other"]}},"coding_required":{"type":["boolean","null"]},"usage_mode":{"enum":["hosted","self_hosted","both","unknown"]},"cost_model":{"enum":["free","paid","usage_based","mixed","unknown"]},"content_locale":{"enum":["zh","en","ja"]},"available_locales":{"type":"array","items":{"enum":["zh","en","ja"]}},"detail_url":{"type":"string"},"data_version":{"type":"string","format":"uuid"},"imported_at":{"type":"string","format":"date-time","description":"First catalog import timestamp; not changed by content or Star refreshes."},"verified_at":{"type":["string","null"],"format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"license":{"type":["string","null"]},"license_url":{"type":["string","null"]},"official_url":{"type":["string","null"]},"repository_url":{"type":["string","null"]},"setup_url":{"type":["string","null"]},"github_stars":{"type":["integer","null"],"minimum":0,"description":"GitHub stargazer count from the GitHub repository; null when not fetched."},"github_stars_checked_at":{"type":["string","null"],"format":"date-time","description":"Timestamp when the GitHub star count was fetched."},"sources":{"type":"array","items":{"type":"object","properties":{"link_status":{"enum":["reachable","unreachable","unknown"]},"url":{"type":"string","format":"uri"},"label":{"type":"string"},"verified_at":{"type":["string","null"],"format":"date-time"}}}},"limitations":{"type":"array","items":{"type":"string"}},"cost_notes":{"type":"object","properties":{"software":{"type":"string"},"model":{"type":"string"},"data":{"type":"string"},"hosting":{"type":"string"}}},"withdrawal_reason":{"type":"string"},"sample":{"type":"boolean"}}}}}}