{"id":20435417,"url":"https://github.com/not-nullptr/languagenut-api-documentation","last_synced_at":"2026-02-18T15:01:03.871Z","repository":{"id":151561589,"uuid":"497124496","full_name":"not-nullptr/languagenut-api-documentation","owner":"not-nullptr","description":null,"archived":false,"fork":false,"pushed_at":"2022-05-27T20:57:08.000Z","size":4,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-11T02:33:51.070Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/not-nullptr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-05-27T20:08:33.000Z","updated_at":"2025-05-13T16:37:18.000Z","dependencies_parsed_at":"2023-06-01T23:15:25.839Z","dependency_job_id":null,"html_url":"https://github.com/not-nullptr/languagenut-api-documentation","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/not-nullptr/languagenut-api-documentation","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/not-nullptr%2Flanguagenut-api-documentation","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/not-nullptr%2Flanguagenut-api-documentation/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/not-nullptr%2Flanguagenut-api-documentation/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/not-nullptr%2Flanguagenut-api-documentation/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/not-nullptr","download_url":"https://codeload.github.com/not-nullptr/languagenut-api-documentation/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/not-nullptr%2Flanguagenut-api-documentation/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29582787,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-18T13:56:48.962Z","status":"ssl_error","status_checked_at":"2026-02-18T13:54:34.145Z","response_time":162,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-15T08:34:11.637Z","updated_at":"2026-02-18T15:01:03.846Z","avatar_url":"https://github.com/not-nullptr.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# Languagenut API Documentation\nDocumentation for Languagenut's API.\n\n## DISCLAIMER\n\nI am not responsible for any kind of trouble you may get in for reading/using this documentation. I do not condone cheating on any competitive services such as Languagenut, as it defeats the point of it. I do not cheat. If you want to, using this documentation, you can. But you shouldn't.\n\n\u003csub\u003eJust so we're all on the same page here, every endpoint on this page has the URL removed because, well, its redundant. Just add `https://api.languagenut.com/` to the beginning of any of the mentioned endpoints to use them!\nI also don't know where else to put this, but my examples use the function `WriteInfoToConsole();` which I wrote; it just formats things nicely. If you want to just copy and paste my code, feel free to replace them with `Console.WriteLine();`. My examples also reference certain variables; I assigned the token to a string called \"newToken\", for example.\u003c/sub\u003e\n## How does the API work?\n\nThe API is mostly made up of endpoints which you send GET requests (and occasionally POST requests) to. There's an endpoint for everything (obviously), although some features of the website are pretty hacky.\n\n## How do I do things with it?\n\nFirst, you need to get an auth token. This obviously requires an account. So go get one of those. Once you have one, open up your IDE and language of choice. Or Postman ~~if you're a coward~~. In my case, I'll be using C# just because it's easy to demonstrate things with. Lets begin!\n\n## So, how do I get an auth token?\n\nIt's pretty simple, actually. You'll want to send a GET request to `/loginController/attemptlogin/`with parameters `username` and `pass`\t (like `/loginController/attemptlogin?username=Username\u0026pass=Pass`.  Here's an example in C# (using a deprecated library because I'm so good at C#; also the code sucks, DON'T USE THIS).\n\n```\npublic static string GetLoginToken(string username, string password)\n{\n\n    string url = \"https://api.languagenut.com/loginController/attemptlogin?username=\" + username + \"\u0026pass=\" + password + \"\u0026languagenutTimeMarker=1653152956557\u0026lastLanguagenutTimeMarker=1653152956557\u0026apiVersion=9\";\n    System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;\n    var request = (HttpWebRequest)WebRequest.Create(url);\n\n    request.Method = \"GET\";\n    request.ContentType = \"application/x-www-form-urlencoded; charset=UTF-8\";\n    request.UserAgent = \"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:100.0) Gecko/20100101 Firefox/100.0\";\n    request.Headers[\"Upgrade-Insecure-Requests\"] = \"1\";\n    request.Host = \"api.languagenut.com\";\n    request.Headers[\"Sec-Fetch-Dest\"] = \"document\";\n    request.Headers[\"Sec-Fetch-Mode\"] = \"navigate\";\n    request.Headers[\"Sec-Fetch-Site\"] = \"none\";\n    request.Headers[\"Sec-Fetch-User\"] = \"?1\";\n    request.Headers[\"Cookie\"] = \"_fbp=fb.1.1653070949979.270584707; _ga=GA1.2.2141399847.1653150179; _gid=GA1.2.1360687336.1653150179; PHPSESSID=pm0opudd90chhrmqnd10n9f9sh\";\n    WriteInfoToConsole(\"Info\", \"Attempting to send GET request to login endpoint!\", ConsoleColor.Blue);\n    try\n    {\n        var response = (HttpWebResponse)request.GetResponse();\n        using (Stream stream = response.GetResponseStream())\n        {\n            StreamReader reader = new StreamReader(stream, Encoding.UTF8);\n            String responseString = reader.ReadToEnd();\n            var jo = JObject.Parse(responseString);\n            newToken = jo[\"newToken\"].ToString();\n            if (newToken != \"\")\n            {\n                WriteInfoToConsole(\"Debug\", newToken, ConsoleColor.Magenta);\n            } else\n            {\n                WriteInfoToConsole(\"Debug\", \"No token received!\", ConsoleColor.Magenta);\n            }\n            if (jo[\"loginError\"].ToString() == \"NONE\")\n            {\n                new SoundPlayer(@\"C:\\Windows\\Media\\tada.wav\").Play();\n                WriteInfoToConsole(\"Info\", \"Token received successfully: \" + jo[\"liveServiceToken\"].ToString(), ConsoleColor.Blue);\n                return jo[\"liveServiceToken\"].ToString();\n            }\n            else\n            {\n                SystemSounds.Hand.Play();\n                WriteInfoToConsole(\"Error\", \"Token was not successfully received. This is fatal, and the script cannot continue. The server reported the error: \" + jo[\"loginError\"].ToString() + \".\", ConsoleColor.Red);\n                WriteInfoToConsole(\"Input\", \"Press any key to exit.\", ConsoleColor.DarkMagenta);\n                Console.ReadKey();\n                Environment.Exit(40);\n            }\n\n        }\n\n    }\n    catch\n    {\n        WriteInfoToConsole(\"Error\", \"Token was not successfully received, THIS WILL NOT WORK!\", ConsoleColor.Red);\n    }\n    return \"\";\n}\n```\n## What can I do now I have authentication?\nA lot. Like, a lot a lot.\n\nOne example is that you can get all of the users info. All of it. The below code returns a JObject (from Newtonsoft.Json) with all of the JSON data parsed into it. You can access a JObject's items like an array but with nesting (for example: `userData[name].ToString();` returns the full name of the user in a string.) \n```\nstatic List\u003cint\u003e moduleArray = new List\u003cint\u003e();\n\npublic static JObject GetUserData(string token)\n{\n    string url = \"https://api.languagenut.com/userDataController/getUserData?token=\" + token;\n    System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;\n    var request = (HttpWebRequest)WebRequest.Create(url);\n\n    request.Method = \"GET\";\n    request.ContentType = \"application/x-www-form-urlencoded; charset=UTF-8\";\n    request.UserAgent = \"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:100.0) Gecko/20100101 Firefox/100.0\";\n    request.Headers[\"Upgrade-Insecure-Requests\"] = \"1\";\n    request.Host = \"api.languagenut.com\";\n    request.Headers[\"Sec-Fetch-Dest\"] = \"document\";\n    request.Headers[\"Sec-Fetch-Mode\"] = \"navigate\";\n    request.Headers[\"Sec-Fetch-Site\"] = \"none\";\n    request.Headers[\"Sec-Fetch-User\"] = \"?1\";\n    request.Headers[\"Cookie\"] = \"_fbp=fb.1.1653070949979.270584707; _ga=GA1.2.2141399847.1653150179; _gid=GA1.2.1360687336.1653150179; PHPSESSID=pm0opudd90chhrmqnd10n9f9sh\";\n    WriteInfoToConsole(\"Info\", \"Attempting to send GET request to module endpoint!\", ConsoleColor.Blue);\n    var response = (HttpWebResponse)request.GetResponse();\n    using (Stream stream = response.GetResponseStream())\n    {\n        StreamReader reader = new StreamReader(stream, Encoding.UTF8);\n        String responseString = reader.ReadToEnd();\n        JObject parsedResponse = JObject.Parse(responseString);\n        return parsedResponse;\n    }\n}\n```\nThe HTTP response will have the following elements:\n\n    ESOLEndDates\n    IntroductionVideo\n    RWYS\n    SRWG\n    accountName\n    accountSettings\n    showSchoolRanking\n    accountUid\n    account_type\n    additionalVocabScreens\n    bronzeMedals\n    country\n    curriculum\n    customContentTeacherScreens\n    daysLeftOfSubscription\n    defined_support\n    displayName\n    goldMedals\n    groups\n    homeworkCounter\n    isLive\n    isMessageDisplay\n    is_cefr\n    name\n    newToken\n    overrideLogo\n    primaryEndDates\n    rank\n    secondLoginType\n    secondaryEndDates\n    silverMedals\n    style\n    tested\n    timeTakenServer\n    totalScore\n    userName\n    userType\n    userUid\n    wordsLearnt\n\n## Give me the endpoints!!\nWell, here's the useful ones.\n\n`/highscoreController/studentsAllAccount?token=(token)` (returns all accounts in order of school ranking, allows output of school ranking and table)\n\n`/screensController/getModuleIds?token=(token)`\nHonestly have no idea how this one works or where some of the parameters come from, not that useful\n\n`/gameDataController/addGameScore`\nFigure it out yourself, you cheater.\n\n\n\u003csub\u003eFootnotes\u003c/sub\u003e\n\n\u003csub\u003e\u003csup\u003eHey! Thanks for reading all of this. This has been something to occupy myself for the past weeks. There seems to be no documentation for any of this online, so I had to find all of this myself. I don't have a Ko-fi or anything, knowing that you're still reading is enough for me. Thank you \u003c3\u003c/sup\u003e\u003c/sub\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnot-nullptr%2Flanguagenut-api-documentation","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnot-nullptr%2Flanguagenut-api-documentation","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnot-nullptr%2Flanguagenut-api-documentation/lists"}