{"id":46613823,"url":"https://github.com/proohit/netcup-node","last_synced_at":"2026-03-07T19:07:21.553Z","repository":{"id":57676309,"uuid":"485772943","full_name":"proohit/netcup-node","owner":"proohit","description":"A node wrapper for the Netcup CCP API.","archived":false,"fork":false,"pushed_at":"2024-11-06T10:10:03.000Z","size":623,"stargazers_count":13,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-08-28T03:10:54.136Z","etag":null,"topics":["api-wrapper","netcup","netcup-api"],"latest_commit_sha":null,"homepage":"","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/proohit.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}},"created_at":"2022-04-26T12:18:28.000Z","updated_at":"2025-05-28T20:49:14.000Z","dependencies_parsed_at":"2023-02-18T15:25:14.826Z","dependency_job_id":null,"html_url":"https://github.com/proohit/netcup-node","commit_stats":null,"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/proohit/netcup-node","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/proohit%2Fnetcup-node","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/proohit%2Fnetcup-node/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/proohit%2Fnetcup-node/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/proohit%2Fnetcup-node/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/proohit","download_url":"https://codeload.github.com/proohit/netcup-node/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/proohit%2Fnetcup-node/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30226872,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-07T19:01:10.287Z","status":"ssl_error","status_checked_at":"2026-03-07T18:59:58.103Z","response_time":53,"last_error":"SSL_read: 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-wrapper","netcup","netcup-api"],"created_at":"2026-03-07T19:07:20.983Z","updated_at":"2026-03-07T19:07:21.537Z","avatar_url":"https://github.com/proohit.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Netcup-node\n\n[![codecov](https://codecov.io/gh/proohit/netcup-node/branch/master/graph/badge.svg?token=QM9CHTM8UL)](https://codecov.io/gh/proohit/netcup-node)\n[![Known Vulnerabilities](https://snyk.io/test/github/proohit/netcup-node/badge.svg)](https://snyk.io/test/github/proohit/netcup-node)\n[![build](https://github.com/proohit/netcup-node/actions/workflows/build.yml/badge.svg)](https://github.com/proohit/netcup-node/actions/workflows/build.yml)\n[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=proohit_netcup-node\u0026metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=proohit_netcup-node)\n[![Bugs](https://sonarcloud.io/api/project_badges/measure?project=proohit_netcup-node\u0026metric=bugs)](https://sonarcloud.io/summary/new_code?id=proohit_netcup-node)\n[![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=proohit_netcup-node\u0026metric=code_smells)](https://sonarcloud.io/summary/new_code?id=proohit_netcup-node)\n[![GitHub last commit](https://img.shields.io/github/last-commit/proohit/netcup-node)](https://github.com/proohit/netcup-node)\n[![npm](https://img.shields.io/npm/v/netcup-node?color=blue)](https://www.npmjs.com/package/netcup-node)\n[![npm](https://img.shields.io/npm/dt/netcup-node)](https://www.npmjs.com/package/netcup-node)\n\nA node wrapper for the [Netcup CCP API](https://www.netcup-wiki.de/wiki/CCP_API).\n\nDocs: [https://proohit.github.io/netcup-node/](https://proohit.github.io/netcup-node/classes/NetcupApi.html)\n\n## Current support\n\n- only [JSON Rest API](https://www.netcup-wiki.de/wiki/CCP_API#Anmerkungen_zu_JSON-Requests), no SOAP yet\n- auto auth handling with support to use custom auth handling\n- functions\n  - `login`\n  - `infoDnsZone`\n  - `infoDnsRecord`\n  - `updateDnsRecords`\n  - `updateDnsRecordWithCurrentIp` to set the current public ip as destination. Works with ipv4 and ipv6. Default updates ipv4 only. Set parameter `useIpv6Only` to true to update ipv6 only. Set parameter `useIpv4AndIpv6` to true to update both ipv4 and ipv6. NOTE: Uses `public-ip` package to get the current public ip.\n- error handling: on any response that isn't `2000` from Netcup, an error with the `longmessage` from Netcup is thrown\n\n## ToDo\n\n- ~~`login`~~\n- ~~`infoDnsZone`~~\n- ~~`infoDnsRecord`~~\n- ~~`updateDnsRecords`~~ (0.0.5)\n- ~~`updateDnsRecordWithCurrentIp`~~ (0.0.6)\n- `logout`\n- reseller api functions\n- different formats\n\n## Getting started\n\n### Installation\n\n```sh\nnpm install --save netcup-node\n```\n\n### Authentication\n\nYou will also need three things from Netcup CCP:\n\n- apikey\n- apipassword\n- customernumber\n\nAfter logging in to [Netcup CCP](https://www.customercontrolpanel.de/), navigate to [Stammdaten](https://www.customercontrolpanel.de/daten_aendern.php) and create the key/password there. The customernumber is next to your name at the top of the CCP.\n\n### Usage\n\nThe default exported `NetcupApi` is a wrapper around the actual api. It handles authentication and passes parameters to the implemented api.\n\n#### ESM\n\n```javascript\nimport NetcupApi from 'netcup-node';\nconst api = await new NetcupApi().init({\n  apikey: 'YOUR_API_KEY',\n  apipassword: 'YOUR_API_PASSWORD',\n  customernumber: 'YOUR_CUSTOMER_NUMBER',\n});\nconst dnsInfo = await api.infoDnsZone({ domainname: 'YOUR.DOMAIN' });\n```\n\nIf you prefer, you can use the `NetcupRestApi` directly, without using the integrated authentication state handling from the default exported `NetcupApi`.\n\n```javascript\nimport { NetcupRestApi } from 'netcup-node';\nconst api = new NetcupRestApi();\nconst authResponse = await api.login({\n  apikey: '',\n  apipassword: '',\n  customernumber: '',\n});\nconst dnsRecords = await api.infoDnsRecords({\n  apisessionid: authResponse.responsedata.apisessionid,\n  apikey: 'YOUR_API_KEY',\n  customernumber: 'YOUR_CUSTOMER_NUMBER',\n  domainname: 'YOUR.DOMAIN',\n});\n```\n\n#### CJS\n\n```javascript\nconst NetcupApi = require('netcup-node').default;\n// or const { NetcupApi } = require('netcup-node');\n\nconst api = await new NetcupApi().init({\n  apikey: 'YOUR_API_KEY',\n  apipassword: 'YOUR_API_PASSWORD',\n  customernumber: 'YOUR_CUSTOMER_NUMBER',\n});\nconst dnsInfo = await api.infoDnsZone({ domainname: 'YOUR.DOMAIN' });\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fproohit%2Fnetcup-node","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fproohit%2Fnetcup-node","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fproohit%2Fnetcup-node/lists"}