{"id":13929137,"url":"https://github.com/MathiasPius/hrobot-rs","last_synced_at":"2025-07-19T11:30:50.811Z","repository":{"id":62440230,"uuid":"447931411","full_name":"MathiasPius/hrobot-rs","owner":"MathiasPius","description":"Hetzner Robot API Client library for Rust","archived":false,"fork":false,"pushed_at":"2025-02-02T20:30:54.000Z","size":545,"stargazers_count":28,"open_issues_count":0,"forks_count":3,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-05T00:51:47.356Z","etag":null,"topics":["dedicated-server","hetzner","hetzner-robot-api"],"latest_commit_sha":null,"homepage":"https://docs.rs/hrobot/latest/hrobot/","language":"Rust","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/MathiasPius.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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}},"created_at":"2022-01-14T10:40:32.000Z","updated_at":"2025-05-11T09:31:27.000Z","dependencies_parsed_at":"2024-04-09T08:29:00.092Z","dependency_job_id":"3180b26c-245b-49d1-9ae5-9d1641db3b3a","html_url":"https://github.com/MathiasPius/hrobot-rs","commit_stats":{"total_commits":48,"total_committers":2,"mean_commits":24.0,"dds":0.02083333333333337,"last_synced_commit":"ab2b7ab951764e19b34b8e6ba83c09b1b847f447"},"previous_names":[],"tags_count":26,"template":false,"template_full_name":null,"purl":"pkg:github/MathiasPius/hrobot-rs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MathiasPius%2Fhrobot-rs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MathiasPius%2Fhrobot-rs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MathiasPius%2Fhrobot-rs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MathiasPius%2Fhrobot-rs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MathiasPius","download_url":"https://codeload.github.com/MathiasPius/hrobot-rs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MathiasPius%2Fhrobot-rs/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265926917,"owners_count":23850886,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["dedicated-server","hetzner","hetzner-robot-api"],"created_at":"2024-08-07T18:02:08.686Z","updated_at":"2025-07-19T11:30:50.505Z","avatar_url":"https://github.com/MathiasPius.png","language":"Rust","funding_links":[],"categories":["others"],"sub_categories":[],"readme":"# hrobot-rs [![Latest Version]][crates.io] [![Docs]][docs.rs] [![codecov]][codecov.io]\n\n[Latest Version]: https://img.shields.io/crates/v/hrobot\n[crates.io]: https://crates.io/crates/hrobot\n[Docs]: https://docs.rs/hrobot/badge.svg\n[docs.rs]: https://docs.rs/hrobot\n[codecov]: https://codecov.io/gh/MathiasPius/hrobot-rs/graph/badge.svg?token=AZZRACXKN1\n[codecov.io]: https://app.codecov.io/gh/MathiasPius/hrobot-rs\n\n\u003c!-- cargo-rdme start --\u003e\n\n`hrobot` is an unofficial asynchronous Rust client for interacting with the [Hetzner Robot API](https://robot.your-server.de/doc/webservice/en.html)\n\nSee the `AsyncRobot` struct for a complete list of supported API Endpoints.\n\n**Disclaimer:** the authors are not associated with Hetzner (except as customers), and the crate is in no way endorsed or supported by Hetzner Online GmbH.\n\n## Requirements for usage\nA Hetzner WebService/app user is required to make use of this library.\n\nIf you already have a Hetzner account, you can create one through the [Hetzner Robot](https://robot.your-server.de) web interface under [Settings/Preferences](https://robot.your-server.de/preferences/index).\n\n## Example\nHere's a quick example showing how to instantiate the `AsyncRobot` client object\nand fetching a list of all dedicated servers owned by the account identified by `username`\n```rust\nuse hrobot::*;\n\n#[tokio::main]\nasync fn main() {\n    // Robot is instantiated using the environment\n    // variables HROBOT_USERNAME an HROBOT_PASSWORD.\n    let robot = AsyncRobot::default();\n\n    for server in robot.list_servers().await.unwrap() {\n        println!(\"{name}: {product} in {location}\",\n            name = server.name,\n            product = server.product,\n            location = server.dc\n        );\n    }\n}\n```\n\nRunning the above example should yield something similar to the output below:\n```text\nfoo: AX51-NVMe in FSN1-DC18\nbar: Server Auction in FSN1-DC5\n```\n\n\u003c!-- cargo-rdme end --\u003e\n\n## API Endpoint Implementation Progress\n\nThe entire Hetzner Robot API is covered at this point!\n\nSome endpoints have not been tested due to the cost and disruption to running servers, so\nplease consult the section below for a detailed overview of the endpoints.\n\u003cdetails\u003e\u003csummary\u003e\nDetailed API overview.\n\u003c/summary\u003e\n\n**Warning!**\n\n[^1] not tested, use at your own risk.\n\n[^2] not officially documented by Hetzner, use at own risk.\n\n- [x] **Server.**\n    - [x] List servers.\n    - [x] Get server.\n    - [x] Rename server.\n    - [x] **Cancellation.**\n        - [x] Get cancellation status.\n        - [x] Cancel server.[^1]\n        - [x] Withdraw cancellation.[^1]\n    - [x] ~~Withdraw server order.~~[^1] - Deprecated by Hetzner.\n- [x] **IP.**\n    - [x] List IPs.\n    - [x] Get IP.\n    - [x] Update traffic warnings.\n    - [x] **Separate MAC.**\n        - [x] Get separate MAC.\n        - [x] Generate separate MAC.[^1]\n        - [x] Disable separate MAC.[^1]\n    - [x] **Cancellation.**\n        - [x] Get cancellation status.\n        - [x] Cancel IP address[^1]\n        - [x] Withdraw cancellation[^1]\n- [x] **Subnet.**\n    - [x] List subnets.\n    - [x] Get subnet.\n    - [x] **Separate MAC.**\n        - [x] Get separate MAC.\n        - [x] Generate separate MAC.[^1]\n        - [x] Disable separate MAC.[^1]\n    - [x] **Cancellation.**[^1]\n        - [x] Get cancellation status.[^1]\n        - [x] Cancel subnet.[^1]\n        - [x] Withdraw cancellation.[^1]\n- [x] **Reset**\n    - [x] List reset options for all servers.\n    - [x] Get reset options for single server\n    - [x] Trigger reset.[^1]\n- [x] **Failover**\n    - [x] Get failover IP.[^1]\n    - [x] Switch routing of failover traffic.[^1]\n    - [x] Disable failover routing.[^1]\n- [x] **Wake on LAN**\n    - [x] Check availability of Wake-on-LAN.\n    - [x] Send Wake-on-LAN packet to server.\n- [x] **Boot Configuration**\n    - [x] Get status of all boot configurations.\n    - [x] **Rescue.**\n        - [x] Get rescue config.\n        - [x] Get last rescue config.\n        - [x] Enable rescue config.\n        - [x] Disable rescue config.\n    - [x] **Linux.**\n        - [x] Get linux config.\n        - [x] Get last linux config.\n        - [x] Enable linux config.\n        - [x] Disable linux config.\n    - [x] **VNC.**\n        - [x] Get VNC config.\n        - [x] Get last VNC config.[^2]\n        - [x] Enable VNC config.\n        - [x] Disable VNC config.\n    - [x] **Windows.**[^1]\n        - [x] Get Windows config.[^1]\n        - [x] Get last Windows config.[^1] [^2]\n        - [x] Enable Windows config.[^1]\n        - [x] Disable Windows config.[^1]\n    - [x] **Plesk.**[^1]\n        - [x] Get Plesk config.[^1]\n        - [x] Get last Plesk config.[^1] [^2]\n        - [x] Enable Plesk config.[^1]\n        - [x] Disable Plesk config.[^1]\n    - [x] **CPanel.**[^1]\n        - [x] Get CPanel config.[^1]\n        - [x] Get last CPanel config.[^1] [^2]\n        - [x] Enable CPanel config.[^1]\n        - [x] Disable CPanel config.[^1]\n- [x] **Reverse DNS.**\n    - [x] List reverse DNS entries.\n    - [x] Get reverse DNS entry\n    - [x] Create reverse DNS entry.\n    - [x] Update/create reverse DNS entry.\n- [x] **Traffic.**\n    - [x] Query traffic data.\n- [x] **SSH Keys.**\n    - [x] List SSH keys\n    - [x] Upload new SSH key\n    - [x] Get SSH key\n    - [x] Rename SSH key\n    - [x] Delete SSH key\n- [x] **Server Ordering.**\n    - [x] **Products.**\n        - [x] List products.\n        - [x] Get product information.\n        - [x] List recent product transactions.[^1]\n        - [x] Get specific transaction information.[^1]\n        - [x] Order new product.\n    - [x] **Market (auction).**\n        - [x] List market products.\n        - [x] Get market product information.\n        - [x] List recent market transactions.[^1]\n        - [x] Get specific market transaction information.[^1]\n        - [x] Order new server from market.\n    - [x] **Addons.**\n        - [x] List available addons for server.\n        - [x] List recent addon transactions.[^1]\n        - [x] Get specific addon transaction information.[^1]\n        - [x] Order addon for server.\n- [x] **Storage Box.**\n    - [x] List storageboxes.\n    - [x] Get specific storage box.\n    - [x] Change storage box password.\n    - [x] Toggle storage box services.\n        - [x] Enable/disable Samba\n        - [x] Enable/disable WebDAV\n        - [x] Enable/disable SSH\n        - [x] Enable/disable External reachability\n        - [x] Enable/disable snapshot directory visibility.\n    - [x] **Snapshots.**\n        - [x] List storagebox snapshots.\n        - [x] Create storagebox snapshot.\n        - [x] Delete storagebox snapshot.\n        - [x] Revert storagebox to snapshot.\n        - [x] Change comment for snapshot.\n        - [x] Get storagebox snapshot plan.\n        - [x] Edit storagebox snapshot plan.\n    - [x] **Subaccounts.**\n        - [x] List subaccounts.\n        - [x] Create subaccount.\n        - [x] Update subaccount configuration.\n        - [x] Delete subaccount.\n        - [x] Change subaccount password.\n- [x] **Firewall.**\n    - [x] Get firewall configuration for server.\n    - [x] Apply firewall configuration to server.\n        - [x] Override rules.\n        - [x] Apply template.\n    - [x] Clear firewall configuration for server.\n    - [x] **Template.**\n        - [x] List firewall templates.\n        - [x] Create firewall template.\n        - [x] Get firewall template.\n        - [x] Update firewall template.\n        - [x] Delete firewall template.\n- [x] **vSwitch.**\n    - [x] List vSwitches.\n    - [x] Create new vSwitch.\n    - [x] Get vSwitch.\n    - [x] Update vSwitch.\n    - [x] Cancel vSwitch.\n    - [x] Add servers to vSwitch.\n    - [x] Remove servers from vSwitch.\n\n[^1]: Not tested, but *should* work. Use at own risk.\n\n[^2]: Not officially documented by Hetzner, use at own risk.\n\u003c/details\u003e\n\n## Testing\nTests are divided into two categories:\n* **Unit tests.**\ns\n    These do not touch the Hetzner API at all and generally test assumptions made in some of the constructs of the library\n    such as serialization/deserialization from known API output. These are always safe to run and do not require Hetzner credentials.\n\n* **Integration tests. ⚠️**\n\n    These tests *do* interact with the Hetzner API, and therefore require the following two environment variables to be set:\n\n    * `HROBOT_USERNAME`\n    * `HROBOT_PASSWORD`\n\n    These tests will ⚠️ **PURCHASE AN AUCTION SERVER** ⚠️ and (ideally) *cancel* the server once tests have run.\n\n    They interact ⚠️ **DESTRUCTIVELY** ⚠️ with the resources provided through the following environment variables:\n\n    * `HETZNER_INTEGRATION_TEST_STORAGEBOX_ID` specifies a pre-allocated storagebox resource which Storagebox-related tests are run against.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMathiasPius%2Fhrobot-rs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FMathiasPius%2Fhrobot-rs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMathiasPius%2Fhrobot-rs/lists"}