REST API for the Tyttoot platform — all requests JSON; admin routes require X-Admin-Token header.
| Method | Path | Auth | Description |
|---|---|---|---|
| POST | /contact/submit |
public | Submit contact form — name, email, subject, message, lang |
| POST | /analytics/page |
public | Log page view — page, lang, referrer |
| POST | /analytics/project |
public | Log project view — projectId, lang |
| POST | /analytics/legacy-url |
public | Log legacy URL hit before SPA redirect — legacyId, canonical |
| POST | /analytics/ads-impression |
public | Log interstitial show — projectId, adsId, deviceId (IP from server) |
| GET | /leaderboard/{projectId} |
public | Get leaderboard — ?season=&limit=&offset= |
| GET | /leaderboard/{projectId}/seasons |
public | List seasons for project leaderboard |
| POST | /leaderboard/{projectId} |
public | Submit score — name, score |
| POST | /players/register |
public | Register display name — X-Player-Token = previous identity on rename |
| GET | /players/suggest |
public | Random names from players table — ?limit= for nickname picks |
| POST | /gameplay/shots |
public | Log Battleship shot — gameId, r, c, hit |
| GET | /gameplay/shots/heatmap |
public | Shot heatmap — ?gameId=fleetGrid |
| GET | /admin/session |
admin user+token | Session — user, adminWrite, ownerAlias |
| GET | /admin/projects |
admin user+token | List merged registry (base + admin overlay) |
| POST | /admin/projects |
admin user+token | Save projects registry — write: owner alias only |
| GET | /admin/contact |
admin user+token | List recent contact submissions |
| GET | /admin/contact/{YYYY-MM} |
admin user+token | Submissions for specific month |
| POST | /admin/contact/read |
admin user+token | Mark submissions as read — {ids:[]} — write owner |
| DELETE | /admin/contact/{id} |
admin user+token | Delete a submission — write owner |
| GET | /admin/analytics |
admin user+token | Page + project view counts (last 3 months) |
| GET | /admin/ads-impressions |
admin user+token | Ads show counts / recent rows — ?projectId=&limit=&months= |
| GET | /admin/project-action-acks |
admin user+token | Pull ack-list — ?action=pull → {items:[{projectId,doneBy,tipSha,…}]} |
| POST | /admin/project-action-acks/clear |
admin user+token | Clear pull acks + ack self (any alias after push) — {projectId,action,tipSha?} |
| POST | /admin/project-action-acks/ack |
admin user+token | Ack self pulled — {projectId,action} (any alias) |
| POST | /admin/project-action-acks/force |
admin user+token | Force clear|ack — write owner — {op,projectId,action,alias?} |
| GET | /admin/project-reviews |
admin user+token | Review queue — ?status=&alias=&projectId= → {items,total} |
| GET | /admin/project-reviews/{projectId} |
admin user+token | Latest review row for projectId |
| POST | /admin/project-reviews/upsert |
admin user+token | Upsert review — any alias — {projectId,promptFile,status,…} |
| POST | /admin/project-reviews/decide |
admin user+token | tyt decide — {verdict:approve|changes_requested,promptFile|projectId,note?} |
| GET | /admin/release-events |
admin user+token | Release events + projects → {events:[{id,title,archived,projects:[{projectId,status,note,assignee}]}],statuses} |
| POST | /admin/release-events/save |
admin user+token | tyt — create/update event {id?,title,description?} |
| POST | /admin/release-events/archive |
admin user+token | tyt — {id,archived:bool} |
| POST | /admin/release-events/delete |
admin user+token | tyt — {id} (xoá cả project) |
| POST | /admin/release-events/projects |
admin user+token | tyt — add/update {eventId,projectIds[],status?,note?,assignee?} |
| POST | /admin/release-events/remove-projects |
admin user+token | tyt — {eventId,projectIds[]} |
| GET | /admin/release-overview |
admin user+token | Nguồn release chuẩn: store/AdMob/status từng nền tảng + events + gaps (?project=id&public=1) |
| POST | /admin/projects/store |
admin user+token | tyt — patch 1 project {projectId,android?,ios?,macos?,web?,publish?} (merge) |
| GET | /admin/bot |
admin user+token | Bot state: enabled, dailyLimit, today, byBot, runs |
| POST | /admin/bot/settings |
admin user+token | tyt — {enabled?,dailyLimit?} |
| POST | /admin/bot/rotate-token |
admin user+token | tyt — token mới (trả 1 lần), token cũ hết hiệu lực |
| POST | /admin/bot/revoke-token |
admin user+token | tyt — xoá token + tắt bot |
| GET | /bot/overview |
admin user+token | X-Bot-Token + X-Bot-Name — như release-overview (?project=&public=1) |
| GET | /bot/me |
admin user+token | Kiểm tra token + hạn mức hôm nay |
| POST | /bot/release-events/projects |
admin user+token | {eventId,projectIds[],status?,note?} (không assignee) |
| POST | /bot/store-status |
admin user+token | {projectId,android|ios|macos|web:{status,statusNote,storeVersion}} |
| POST | /bot/log |
admin user+token | {action,detail,ok} — bot tự báo cáo |
http://127.0.0.1:8000/subdomain/api/public_html/ · prod: https://api.tyttoot.com/X-Admin-User (machine alias) + X-Admin-Token (ADMIN_TOKEN / env TYTTOOT_ADMIN_TOKEN). Write mutations only for platform owner alias (tyt)./home/u131129205/domains/tyttoot.com-bk/public_html/subdomain/api/public_html/configconnected