Base URL: https://lingoo.top (entrada PHP = pasta adm, sem /public na URL). Rotas abaixo são relativas a essa base.
Exemplos de URL completos no deploy atual: https://lingoo.top + rota (ex.: https://lingoo.top/api/v1/decks).
POST /api/v1/auth/sync
Body JSON: {"idToken":"<Firebase ID token>"}. Valida o token com o projeto FIREBASE_PROJECT_ID e cria/atualiza o usuário (email, avatar, plano).
Envie Authorization: Bearer <idToken> (token Firebase atual do usuário).
/api/v1/me — perfil, IDs de baralhos salvos./api/v1/me/progress — body {"items":[{"deck_id":"...","card_index":0,"payload":{...}}]} (payload = progresso da carta)./api/v1/me/progress?deck_id=.../api/v1/me/decks/{id}/save — salvar baralho na biblioteca./api/v1/me/decks/{id}/unsave/api/v1/me/study-events — body {"events":[{"deck_id":"...","card_index":0,"quality":"...","meta":{}}]} (meta opcional).GET /api/v1/decks
Parâmetros de query opcionais (Postman → Params):
q — busca em título e descriçãodest_lang_slug, level_slug, subject_slug, style_slugcontent_locale — ex.: pt_BRfeed — catalog (padrão, catálogo completo), saved (apenas salvos na biblioteca; exige Bearer, senão 401), accessible (só baralhos que o usuário pode estudar por completo; sem login equivale a só gratuitos)sort — updated (padrão, por data) ou for_you (prioriza salvos e acesso total; sem login cai em updated)free_only — 1 ou true: se não houver Bearer, lista só baralhos free (com login o parâmetro é ignorado)Header opcional: Authorization: Bearer … para preencher access.can_study_full, access.reason, is_saved e meta.viewer.
Resposta: JSON com meta (total, feed, sort, free_only_applied — se o catálogo veio restrito a gratuitos, viewer) e data (inclui icon_url, cover_image_url, pricing, access, is_saved; em feed=saved pode vir saved_at).
GET /api/v1/decks/{id}
Retorna cabecalho (com icon_url, cover_image_url, precificacao), cards, e campos locked, preview_limit, total_cards. Baralhos premium sem direito retornam só prévia de cartas.
{{baseUrl}}/api/v1/decks.baseUrl = https://lingoo.top (dev: http://127.0.0.1:8080 com php -S -t adm). Se o vhost expuser a API em /adm, use https://lingoo.top como baseUrl.application/json (opcional).OpenAPI: importe o arquivo adm/docs/openapi.yaml no Postman (Import → arquivo).