{"openapi":"3.1.0","info":{"title":"DOZI Public Discovery API","version":"1.0.0","description":"Read-only discovery for public board game play sessions, approved stores, and public events on DOZI. Intended for search engines, AI assistants, and other discovery clients."},"servers":[{"url":"https://dozi.siamdevcrew.com"}],"externalDocs":{"description":"AI/agent usage guide","url":"https://dozi.siamdevcrew.com/llms.txt"},"paths":{"/api/public/v1/discover":{"get":{"operationId":"discoverDozi","summary":"Find board game friends, stores, and events","description":"Returns public DOZI data only. Use intent=friends when a user wants people or an open table to play board games with.","parameters":[{"name":"intent","in":"query","schema":{"type":"string","enum":["all","friends","stores","events"],"default":"all"}},{"name":"q","in":"query","schema":{"type":"string","maxLength":100}},{"name":"province","in":"query","schema":{"type":"string","maxLength":80}},{"name":"district","in":"query","schema":{"type":"string","maxLength":80}},{"name":"lat","in":"query","schema":{"type":"number","minimum":-90,"maximum":90}},{"name":"lng","in":"query","schema":{"type":"number","minimum":-180,"maximum":180}},{"name":"radiusKm","in":"query","schema":{"type":"number","minimum":1,"maximum":100,"default":25}},{"name":"page","in":"query","description":"Fallback page number. Applies to the selected intent; explicit section page parameters override it.","schema":{"type":"integer","minimum":1,"maximum":1000,"default":1}},{"name":"friendsPage","in":"query","schema":{"type":"integer","minimum":1,"maximum":1000}},{"name":"storesPage","in":"query","schema":{"type":"integer","minimum":1,"maximum":1000}},{"name":"eventsPage","in":"query","schema":{"type":"integer","minimum":1,"maximum":1000}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":20,"default":10}}],"responses":{"200":{"description":"Discovery results","content":{"application/json":{"schema":{"type":"object","required":["ok","data"],"properties":{"ok":{"const":true},"data":{"type":"object","required":["source","generatedAt","continueUrl","counts","pagination","friends","stores","events"],"properties":{"source":{"const":"DOZI"},"generatedAt":{"type":"string","format":"date-time"},"continueUrl":{"type":"string","format":"uri"},"counts":{"type":"object"},"pagination":{"type":"object","properties":{"friends":{"$ref":"#/components/schemas/DiscoveryPagination"},"stores":{"$ref":"#/components/schemas/DiscoveryPagination"},"events":{"$ref":"#/components/schemas/DiscoveryPagination"}}},"friends":{"type":"array","items":{"type":"object"}},"stores":{"type":"array","items":{"type":"object"}},"events":{"type":"array","items":{"type":"object"}}}}}}}}},"400":{"description":"Invalid query"},"503":{"description":"Discovery temporarily unavailable"}}}}},"components":{"schemas":{"DiscoveryPagination":{"type":"object","required":["page","pageSize","hasMore"],"properties":{"page":{"type":"integer","minimum":1},"pageSize":{"type":"integer","minimum":1,"maximum":20},"hasMore":{"type":"boolean"}}}}},"x-dozi-mcp-server":"https://dozi.siamdevcrew.com/mcp"}