{"openapi":"3.1.0","info":{"title":"Laka3a Public API","version":"1.0.0","description":"Read-only public API for the Laka3a Arabic & English social-deduction party game. Returns site metadata, page summaries, articles, FAQs, coin packages, game info, and search across public content.","contact":{"name":"Laka3a Support","email":"info@khotoh.sa","url":"https://www.laka3a.com"},"license":{"name":"Proprietary"}},"servers":[{"url":"https://www.laka3a.com","description":"Production"}],"tags":[{"name":"Site","description":"Site-level metadata"},{"name":"Game","description":"Public game info"},{"name":"Content","description":"Pages, articles, FAQs"},{"name":"Commerce","description":"Public read-only coin packages"},{"name":"Search","description":"Public content search"}],"paths":{"/api/public/site":{"get":{"tags":["Site"],"summary":"Get site metadata","description":"Returns site name, languages, markets, primary URLs, and support channels.","operationId":"getPublicSite","responses":{"200":{"description":"Site object","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteResponse"}}}},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/public/game-info":{"get":{"tags":["Game"],"summary":"Get structured game information","operationId":"getPublicGameInfo","responses":{"200":{"description":"Game info","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GameInfoResponse"}}}},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/public/pages":{"get":{"tags":["Content"],"summary":"List public marketing pages","operationId":"listPublicPages","responses":{"200":{"description":"List of pages","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagesResponse"}}}},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/public/faqs":{"get":{"tags":["Content"],"summary":"Get FAQ items","operationId":"listPublicFaqs","parameters":[{"$ref":"#/components/parameters/LocaleQuery"}],"responses":{"200":{"description":"FAQ items","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FaqsResponse"}}}},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/public/articles":{"get":{"tags":["Content"],"summary":"List articles and guides","operationId":"listPublicArticles","parameters":[{"$ref":"#/components/parameters/LocaleQuery"},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200},"description":"Optional case-insensitive substring filter"}],"responses":{"200":{"description":"Article list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArticleListResponse"}}}},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/public/articles/{slug}":{"get":{"tags":["Content"],"summary":"Get a single article","operationId":"getPublicArticle","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","enum":["imposter","spy-game","how-to-play","about"]}},{"$ref":"#/components/parameters/LocaleQuery"}],"responses":{"200":{"description":"Article","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArticleResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/public/packages":{"get":{"tags":["Commerce"],"summary":"List active coin packages","operationId":"listPublicCoinPackages","responses":{"200":{"description":"Coin packages","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PackagesResponse"}}}},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/public/search":{"get":{"tags":["Search"],"summary":"Search public content","operationId":"publicSearch","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":200}},{"$ref":"#/components/parameters/LocaleQuery"}],"responses":{"200":{"description":"Search results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"429":{"$ref":"#/components/responses/RateLimited"}}}}},"components":{"parameters":{"LocaleQuery":{"name":"locale","in":"query","required":false,"description":"Content locale. Defaults to Accept-Language if omitted; falls back to 'ar'.","schema":{"type":"string","enum":["ar","en"]}}},"responses":{"BadRequest":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"NotFound":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"RateLimited":{"description":"Rate limited","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds before retrying"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"schemas":{"OkBase":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{}}},"ErrorEnvelope":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["BAD_REQUEST","NOT_FOUND","RATE_LIMITED","INTERNAL_ERROR","UNSUPPORTED_LOCALE","ARTICLE_NOT_FOUND"]},"message":{"type":"string"}}}}},"LocalizedString":{"type":"object","properties":{"ar":{"type":"string"},"en":{"type":"string"}},"required":["ar","en"]},"Site":{"type":"object","properties":{"name":{"type":"string"},"legalName":{"type":"string"},"description":{"$ref":"#/components/schemas/LocalizedString"},"url":{"type":"string","format":"uri"},"playUrl":{"type":"string","format":"uri"},"primaryLanguage":{"type":"string","enum":["ar","en"]},"supportedLanguages":{"type":"array","items":{"type":"string","enum":["ar","en"]}},"markets":{"type":"array","items":{"type":"string"}},"support":{"type":"object","properties":{"email":{"type":"string"},"phone":{"type":"string"},"chatUrl":{"type":"string","format":"uri"}}},"publishedAt":{"type":"string","format":"date-time"}}},"SiteResponse":{"allOf":[{"$ref":"#/components/schemas/OkBase"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Site"}}}]},"GameInfo":{"type":"object","properties":{"category":{"type":"string"},"modes":{"type":"array","items":{"type":"string"}},"supportsMobile":{"type":"boolean"},"requiresDownload":{"type":"boolean"},"minPlayers":{"type":"integer"},"maxPlayers":{"type":"integer"},"approximateRoundMinutes":{"type":"integer"},"ageRating":{"type":"string"},"languages":{"type":"array","items":{"type":"string"}},"playUrl":{"type":"string","format":"uri"}}},"GameInfoResponse":{"allOf":[{"$ref":"#/components/schemas/OkBase"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/GameInfo"}}}]},"Page":{"type":"object","properties":{"slug":{"type":"string"},"url":{"type":"string","format":"uri"},"title":{"$ref":"#/components/schemas/LocalizedString"},"description":{"$ref":"#/components/schemas/LocalizedString"},"type":{"type":"string","enum":["home","article","faq","guide","support","legal","pricing"]}}},"PagesResponse":{"allOf":[{"$ref":"#/components/schemas/OkBase"},{"type":"object","properties":{"data":{"type":"object","properties":{"pages":{"type":"array","items":{"$ref":"#/components/schemas/Page"}}}}}}]},"FaqItem":{"type":"object","properties":{"id":{"type":"string"},"locale":{"type":"string","enum":["ar","en"]},"q":{"type":"string"},"a":{"type":"string"}}},"FaqsResponse":{"allOf":[{"$ref":"#/components/schemas/OkBase"},{"type":"object","properties":{"data":{"type":"object","properties":{"locale":{"type":"string","enum":["ar","en"]},"items":{"type":"array","items":{"$ref":"#/components/schemas/FaqItem"}}}}}}]},"Article":{"type":"object","properties":{"slug":{"type":"string"},"locale":{"type":"string","enum":["ar","en"]},"type":{"type":"string","enum":["faq","guide","article"]},"url":{"type":"string","format":"uri"},"title":{"type":"string"},"description":{"type":"string"},"body":{"type":"array","items":{"type":"object","properties":{"heading":{"type":"string"},"text":{"type":"string"}}}},"updatedAt":{"type":"string","format":"date-time"}}},"ArticleListResponse":{"allOf":[{"$ref":"#/components/schemas/OkBase"},{"type":"object","properties":{"data":{"type":"object","properties":{"locale":{"type":"string","enum":["ar","en"]},"q":{"type":["string","null"]},"count":{"type":"integer"},"items":{"type":"array","items":{"$ref":"#/components/schemas/Article"}}}}}}]},"ArticleResponse":{"allOf":[{"$ref":"#/components/schemas/OkBase"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Article"}}}]},"Package":{"type":"object","properties":{"id":{"type":"string"},"name":{"$ref":"#/components/schemas/LocalizedString"},"description":{"$ref":"#/components/schemas/LocalizedString"},"coins":{"type":"integer"},"bonusCoins":{"type":"integer"},"totalCoins":{"type":"integer"},"price":{"type":"number"},"currency":{"type":"string"},"popular":{"type":"boolean"},"url":{"type":"string","format":"uri"}}},"PackagesResponse":{"allOf":[{"$ref":"#/components/schemas/OkBase"},{"type":"object","properties":{"data":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Package"}}}}}}]},"SearchResult":{"type":"object","properties":{"type":{"type":"string","enum":["article","faq","page"]},"slug":{"type":"string"},"locale":{"type":"string","enum":["ar","en"]},"url":{"type":"string","format":"uri"},"title":{"type":"string"},"snippet":{"type":"string"},"score":{"type":"number"}}},"SearchResponse":{"allOf":[{"$ref":"#/components/schemas/OkBase"},{"type":"object","properties":{"data":{"type":"object","properties":{"q":{"type":"string"},"locale":{"type":"string","enum":["ar","en"]},"count":{"type":"integer"},"results":{"type":"array","items":{"$ref":"#/components/schemas/SearchResult"}}}}}}]}}}}