{"id":23991731,"url":"https://github.com/glatrix/tfd-api-sdk","last_synced_at":"2026-06-15T17:32:15.785Z","repository":{"id":248337899,"uuid":"828426678","full_name":"Glatrix/TFD-API-SDK","owner":"Glatrix","description":"An unofficial dotnet / csharp SDK for The First Descendant API","archived":false,"fork":false,"pushed_at":"2024-07-14T06:00:02.000Z","size":32,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-25T05:31:58.037Z","etag":null,"topics":["nexon-openapi","nexonstudio","tfa","thefirstdescendant"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Glatrix.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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":"2024-07-14T05:40:54.000Z","updated_at":"2024-08-04T23:53:16.000Z","dependencies_parsed_at":"2024-07-14T06:49:48.830Z","dependency_job_id":null,"html_url":"https://github.com/Glatrix/TFD-API-SDK","commit_stats":null,"previous_names":["glatrix/thefirstdescendantsdk"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Glatrix/TFD-API-SDK","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Glatrix%2FTFD-API-SDK","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Glatrix%2FTFD-API-SDK/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Glatrix%2FTFD-API-SDK/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Glatrix%2FTFD-API-SDK/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Glatrix","download_url":"https://codeload.github.com/Glatrix/TFD-API-SDK/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Glatrix%2FTFD-API-SDK/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34374146,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-15T02:00:07.085Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["nexon-openapi","nexonstudio","tfa","thefirstdescendant"],"created_at":"2025-01-07T19:59:50.101Z","updated_at":"2026-06-15T17:32:15.770Z","avatar_url":"https://github.com/Glatrix.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# The First Descendant API SDK\nAn Unofficial dotnet / csharp SDK for [Nexon's OpenAPI for The First Descendant](https://openapi.nexon.com/game/tfd/?id=20)\n\nWork In Progress. Feel free to make pull requests to improve. Example code worked for me :)\n\nCredit To [FraWolf's Typescript Version](https://github.com/FraWolf/tfd-api) for some of the models\n\n```csharp\nusing TfdApiSDK;\nusing TfdApiSDK.Models.General;\nusing TfdApiSDK.Models.Account;\nusing TfdApiSDK.Models.Game;\nusing System.Web;\nusing System.Text.Json;\n\nnamespace YourApp\n{\n    internal class Program\n    {\n        private const string KEY = \"test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\";\n        private const string USERNAME = \"User#1234\";\n\n        static async Task Main(string[] args)\n        {\n            APIClient client = new TfdApiSDK.APIClient(KEY, throwOnSdkError: true);\n\n            // MetaData API\n            //APIResponse\u003cIDescendant[]\u003e? DescendantMetadata = await client.metadataAPI.GetDescendantMetadata();\n            //APIResponse\u003cIWeapon[]\u003e? WeaponMetadata = await client.metadataAPI.GetWeaponMetadata();\n            APIResponse\u003cIModule[]\u003e? ModuleMetadata = await client.metadataAPI.GetModuleMetadata();\n            //APIResponse\u003cIReactor[]\u003e? ReactorMetadata = await client.metadataAPI.GetReactorMetadata();\n            //APIResponse\u003cIExternalComponent[]\u003e? ExternalComponentMetadata = await client.metadataAPI.GetExternalComponentMetadata();\n            //APIResponse\u003cIReward[]\u003e? RewardMetadata = await client.metadataAPI.GetRewardMetadata();\n            //APIResponse\u003cIStat[]\u003e? StatMetadata = await client.metadataAPI.GetStatMetadata();\n            //APIResponse\u003cIVoidBattle[]\u003e? VoidBattleMetadata = await client.metadataAPI.GetVoidBattleMetadata();\n            //APIResponse\u003cITitle[]\u003e? TitleMetadata = await client.metadataAPI.GetTitleMetadata();\n\n            // Account API\n            APIResponse\u003cUser\u003e? UserOUID = await client.accountAPI.GetUserOUID(USERNAME);\n            string? ouid = UserOUID?.Value.ouid;\n\n            if(ouid is null) { return; }\n\n            APIResponse\u003cUserBasic\u003e? UserBasicInfo = await client.accountAPI.GetUserBasicInfo(ouid);\n            APIResponse\u003cUserDescendant\u003e? UserDescendantInfo = await client.accountAPI.GetUserDescendantInfo(ouid);\n            APIResponse\u003cUserWeapon\u003e? UserWeaponInfo = await client.accountAPI.GetUserWeaponInfo(ouid);\n            APIResponse\u003cUserReactor\u003e? UserReactorInfo = await client.accountAPI.GetUserReactorInfo(ouid);\n            APIResponse\u003cExternalComponent\u003e? UserExternalComponent = await client.accountAPI.GetUserExternalComponent(ouid);\n\n            string? descendant_id = UserDescendantInfo?.Value.descendant_id;\n            string? weapon_id = UserWeaponInfo?.Value.weapon[0].weapon_id; // first (top slot) weapon ID\n            string? void_battle_id = \"651000001\"; // Grave Walker\n            QueryPeriod period = QueryPeriod.Last7Days;\n\n            if (descendant_id is null || weapon_id is null || void_battle_id is null) { return; }\n\n            APIResponse\u003cRecommendationModule\u003e? RecommendationModule = \n                await client.accountAPI.GetRecommendationModule(descendant_id, weapon_id, void_battle_id, period);\n\n            if(RecommendationModule?.Value.descendant.recommendation.Length == 0) { return; }\n\n            string? module_id = RecommendationModule?.Value.descendant.recommendation[0].module_id;\n            string? module_name = ModuleMetadata?.Value.FirstOrDefault((mod) =\u003e mod.module_id == module_id)?.module_name;\n            Console.WriteLine($\"The Module You Should Pick Is: {module_name ?? \"N/A\"}\");\n        }\n    }\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fglatrix%2Ftfd-api-sdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fglatrix%2Ftfd-api-sdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fglatrix%2Ftfd-api-sdk/lists"}