{"openapi":"3.0.3","info":{"title":"Remote Google Backend API","version":"1.0.0","description":"com.ming.billiard membership backend"},"servers":[{"url":"https://remote-google-api.chiyoukeji.cn"}],"paths":{"/healthz":{"get":{"summary":"Health check","responses":{"200":{"description":"ok"}}}},"/api/v1/entitlement/status":{"get":{"summary":"Get entitlement status","parameters":[{"name":"app_user_key","in":"query","required":true,"schema":{"type":"string"}},{"name":"device_brand","in":"query","schema":{"type":"string"}},{"name":"device_model","in":"query","schema":{"type":"string"}},{"name":"device_name","in":"query","schema":{"type":"string"}},{"name":"os_version","in":"query","schema":{"type":"string"}},{"name":"sdk_int","in":"query","schema":{"type":"integer"}},{"name":"app_version_name","in":"query","schema":{"type":"string"}},{"name":"app_version_code","in":"query","schema":{"type":"integer"}},{"name":"channel","in":"query","schema":{"type":"string"}},{"name":"locale","in":"query","schema":{"type":"string"}},{"name":"timezone","in":"query","schema":{"type":"string"}},{"name":"network_type","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Entitlement snapshot"}}}},"/api/v1/redeem/apply":{"post":{"summary":"Apply redeem code","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["app_user_key","redeem_code"],"properties":{"app_user_key":{"type":"string"},"redeem_code":{"type":"string"},"device_brand":{"type":"string"},"device_model":{"type":"string"},"device_name":{"type":"string"},"os_version":{"type":"string"},"sdk_int":{"type":"integer"},"app_version_name":{"type":"string"},"app_version_code":{"type":"integer"},"channel":{"type":"string"},"locale":{"type":"string"},"timezone":{"type":"string"},"network_type":{"type":"string"}}}}}},"responses":{"200":{"description":"Updated entitlement after redeem"}}}},"/api/v1/subscription/verify":{"post":{"summary":"Verify Google Play subscription","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["app_user_key","package_name","product_id","purchase_token"],"properties":{"app_user_key":{"type":"string"},"package_name":{"type":"string"},"product_id":{"type":"string"},"purchase_token":{"type":"string"},"base_plan_id":{"type":"string"},"platform":{"type":"string"},"device_brand":{"type":"string"},"device_model":{"type":"string"},"device_name":{"type":"string"},"os_version":{"type":"string"},"sdk_int":{"type":"integer"},"app_version_name":{"type":"string"},"app_version_code":{"type":"integer"},"channel":{"type":"string"},"locale":{"type":"string"},"timezone":{"type":"string"},"network_type":{"type":"string"}}}}}},"responses":{"200":{"description":"Updated entitlement after subscription verify"}}}},"/api/v1/subscription/restore":{"post":{"summary":"Restore Google Play subscriptions","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["app_user_key","package_name","product_id","purchase_tokens"],"properties":{"app_user_key":{"type":"string"},"package_name":{"type":"string"},"product_id":{"type":"string"},"purchase_tokens":{"type":"array","items":{"type":"string"}},"platform":{"type":"string"},"device_brand":{"type":"string"},"device_model":{"type":"string"},"device_name":{"type":"string"},"os_version":{"type":"string"},"sdk_int":{"type":"integer"},"app_version_name":{"type":"string"},"app_version_code":{"type":"integer"},"channel":{"type":"string"},"locale":{"type":"string"},"timezone":{"type":"string"},"network_type":{"type":"string"}}}}}},"responses":{"200":{"description":"Updated entitlement after restore"}}}},"/api/admin/login":{"post":{"summary":"Admin login","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["username","password"],"properties":{"username":{"type":"string"},"password":{"type":"string"}}}}}},"responses":{"200":{"description":"Bearer token"}}}},"/api/admin/me":{"get":{"summary":"Current admin profile","responses":{"200":{"description":"Admin profile"}}}},"/api/admin/dashboard/overview":{"get":{"summary":"Dashboard overview","responses":{"200":{"description":"Dashboard stats"}}}},"/api/admin/users":{"get":{"summary":"Admin users list","responses":{"200":{"description":"Paginated users"}}}},"/api/admin/users/{id}":{"get":{"summary":"Admin user detail","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"User detail"}}}},"/api/admin/redeem-codes":{"get":{"summary":"Redeem code list","responses":{"200":{"description":"Paginated redeem codes"}}},"post":{"summary":"Create redeem code","responses":{"200":{"description":"Created redeem code"}}}},"/api/admin/redeem-codes/batch-create":{"post":{"summary":"Batch create redeem codes","responses":{"200":{"description":"Batch create result"}}}},"/api/admin/redeem-codes/{id}/disable":{"post":{"summary":"Disable redeem code","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Disabled redeem code"}}}},"/api/admin/redeem-codes/{id}":{"delete":{"summary":"Delete redeem code","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Deleted redeem code"}}}}}}