{"id":35887487,"url":"https://github.com/Hacksore/bluelinky","last_synced_at":"2026-01-15T06:00:53.190Z","repository":{"id":37588173,"uuid":"191275191","full_name":"Hacksore/bluelinky","owner":"Hacksore","description":"An unofficial nodejs API wrapper for Hyundai bluelink and Kia UVO","archived":false,"fork":false,"pushed_at":"2025-08-13T00:03:00.000Z","size":2186,"stargazers_count":436,"open_issues_count":28,"forks_count":99,"subscribers_count":25,"default_branch":"master","last_synced_at":"2025-10-14T09:57:03.685Z","etag":null,"topics":["api","api-wrapper","bluelink","hyundai","kia","nodejs","unofficial","uvo"],"latest_commit_sha":null,"homepage":"https://bluelinky.readme.io","language":"TypeScript","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/Hacksore.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null}},"created_at":"2019-06-11T02:00:23.000Z","updated_at":"2025-10-12T21:31:19.000Z","dependencies_parsed_at":"2024-04-01T15:31:51.702Z","dependency_job_id":"af258a55-df78-4695-8649-87972531406d","html_url":"https://github.com/Hacksore/bluelinky","commit_stats":{"total_commits":353,"total_committers":20,"mean_commits":17.65,"dds":0.6770538243626063,"last_synced_commit":"4a13160d31cb67a877b5b9303720d8f056806ebf"},"previous_names":[],"tags_count":48,"template":false,"template_full_name":null,"purl":"pkg:github/Hacksore/bluelinky","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hacksore%2Fbluelinky","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hacksore%2Fbluelinky/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hacksore%2Fbluelinky/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hacksore%2Fbluelinky/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Hacksore","download_url":"https://codeload.github.com/Hacksore/bluelinky/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hacksore%2Fbluelinky/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28444124,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-15T05:05:00.929Z","status":"ssl_error","status_checked_at":"2026-01-15T05:04:58.515Z","response_time":62,"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":["api","api-wrapper","bluelink","hyundai","kia","nodejs","unofficial","uvo"],"created_at":"2026-01-08T22:00:44.458Z","updated_at":"2026-01-15T06:00:53.184Z","avatar_url":"https://github.com/Hacksore.png","language":"TypeScript","readme":"# bluelinky\r\n\r\nAn unofficial nodejs API wrapper for Hyundai BlueLink\r\n\r\n[![npm](https://img.shields.io/npm/v/bluelinky.svg)](https://www.npmjs.com/package/bluelinky)\r\n[![Discord](https://img.shields.io/discord/652755205041029120)](https://discord.gg/HwnG8sY)\r\n\r\n## Install\r\n```sh\r\nnpm install bluelinky\r\n```\r\n\r\n## Example\r\n```javascript\r\nconst {BlueLinky} = require('bluelinky');\r\n\r\nconst client = new BlueLinky({\r\n  username: 'someguy@example.com',\r\n  password: 'hunter1',\r\n  brand: 'hyundai',\r\n  region: 'US',\r\n  pin: '1234'\r\n});\r\n\r\nclient.on('ready', async () =\u003e {\r\n  const vehicle = client.getVehicle('5NMS55555555555555');\r\n  try {\r\n    const response = await vehicle.lock();\r\n    console.log(response);\r\n  } catch (err) {\r\n    // log the error from the command invocation \r\n  }\r\n});\r\n\r\nclient.on('error', async (err) =\u003e {\r\n  // something went wrong with login\r\n});\r\n\r\n```\r\n\r\n## Debug locally\r\nEnsure you have a `config.json` that matches the structure of the following, with your account details\r\n\r\n```json\r\n{\r\n  \"username\": \"email\",\r\n  \"password\": \"password\",\r\n  \"pin\": \"pin\",\r\n  \"brand\": \"kia\" or \"hyundai\",\r\n  \"vin\": \"vin\",\r\n  \"useInfo\": false\r\n}\r\n```\r\nRun an install for all the dependencies, `npm install`\r\n\r\nNow you can invoke the debug.ts script with `npm run debug`\r\n\r\n## Documentation\r\nCheckout out the [docs](https://bluelinky.readme.io) for more info.\r\n\r\nImportant information for login problems:\r\n- If you experience login problems, please logout from the app on your phone and login again. You might need to ' upgrade ' your account to a generic Kia/Hyundai account, or create a new password or PIN.\r\n- After you migrated your Bluelink account to a generic Hyundai account, or your UVO account to a generic Kia account, make sure that both accounts have the same credentials (userid and password) to avoid confusion in logging in.\r\n\r\n### EU specific options\r\nEU has specific Bluelinky options :\r\n\r\n- `language`: The language to use when login into the system, it will also change the laguage of your mobile app. `en` by default.\r\n- `stampMode`: *Advanced* The kind of stamping mechanism to use (`LOCAL` | `DISTANT`). `DISTANT` by default. :warning: though `LOCAL` seems to work properly, it's in beta for now.\r\n- `stampFile`: *Advanced* The `DISTANT` stamp source to use. `https://raw.githubusercontent.com/neoPix/bluelinky-stamps/master/${brand}-${appId}.v2.json` by default.\r\n\r\n### Custom Stamps\r\nIn the EU region, stamps are used to sign every API queries. These stamps have a 1 week validity. Those stamps are using a tricky algorithm and cannot be replicated by Bluelinky and have to be generated by an external solution. An http call is performed to get the existing tokens. It is possible to specify an other path using the `stampFile` option. This path can be a local file prefixed by `file://` or from any webserver.\r\n\r\nBy default the case is 24H, but it can but customized at will. A nice trick is to run you own stamp generator http server and querying it regularly (with low cache timeout) for fresh stamps.\r\n\r\nThe JSON file must respect [this format](https://github.com/neoPix/bluelinky-stamps/blob/master/kia.json)\r\n\r\n## Supported Features\r\n- Lock\r\n- Unlock\r\n- Start (with climate control)\r\n- Stop\r\n- Status (full, parsed, cached)\r\n- odometer\r\n- location\r\n- startCharge\r\n- monthlyReport\r\n- tripInfo\r\n- EV: driveHistory\r\n- EV: getChargeTargets\r\n- EV: setChargeLimits\r\n\r\n## Supported Regions\r\n| [Regions](https://github.com/Hacksore/bluelinky/wiki/Regions) \r\n## Show your support\r\n\r\nGive a ⭐️ if this project helped you!\r\n\r\n## Warnings\r\nUsing Bluelinky may result in draining your 12V battery when refreshing from the car too often. \r\nMake sure you have read and understood the terms of use of your Kia or Hyundai account before using Bluelinky.\r\n","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FHacksore%2Fbluelinky","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FHacksore%2Fbluelinky","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FHacksore%2Fbluelinky/lists"}