{"id":13686640,"url":"https://github.com/MaximilianKoestler/hcloud-openapi","last_synced_at":"2025-05-01T09:32:18.620Z","repository":{"id":39675015,"uuid":"266785930","full_name":"MaximilianKoestler/hcloud-openapi","owner":"MaximilianKoestler","description":"This is the unofficial OpenAPI description of the Hetzner Cloud API. It allows automatic code generation for the hcloud API.","archived":false,"fork":false,"pushed_at":"2025-03-31T20:26:53.000Z","size":674,"stargazers_count":32,"open_issues_count":0,"forks_count":5,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-03-31T21:28:43.312Z","etag":null,"topics":["api","hcloud","hetzner","hetzner-cloud","openapi","openapi3","rest","rest-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/MaximilianKoestler.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}},"created_at":"2020-05-25T13:26:36.000Z","updated_at":"2025-03-31T20:26:57.000Z","dependencies_parsed_at":"2023-11-23T09:29:04.236Z","dependency_job_id":"28e256cb-c27d-4e04-8eb8-a3f42e7ca3d2","html_url":"https://github.com/MaximilianKoestler/hcloud-openapi","commit_stats":null,"previous_names":[],"tags_count":25,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MaximilianKoestler%2Fhcloud-openapi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MaximilianKoestler%2Fhcloud-openapi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MaximilianKoestler%2Fhcloud-openapi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MaximilianKoestler%2Fhcloud-openapi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MaximilianKoestler","download_url":"https://codeload.github.com/MaximilianKoestler/hcloud-openapi/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251852849,"owners_count":21654475,"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":["api","hcloud","hetzner","hetzner-cloud","openapi","openapi3","rest","rest-api"],"created_at":"2024-08-02T15:00:36.583Z","updated_at":"2025-05-01T09:32:18.270Z","avatar_url":"https://github.com/MaximilianKoestler.png","language":"TypeScript","funding_links":[],"categories":["api"],"sub_categories":[],"readme":"# Unofficial OpenAPI Description for the Hetzner Cloud API\n\n![](https://github.com/MaximilianKoestler/hcloud-openapi/workflows/CI%20Build%20and%20OpenAPI%20Spec%20Generation/badge.svg)\n\nThis is an attempt to improve Hetzner's own OpenAPI specification to make it usable in code generation.\n\nWhen this project was started, Hetzner had not published their own OpenAPI specification for their cloud API, so I decided to build my own based on the HTML documentation on their website.\nLuckily, Hetzner has actually published an [OpenAPI spec for their API](https://docs.hetzner.cloud/spec.json) in the meantime but I think this project still adds some value.\n\nWhile Hetzner now appears to generate their documentation website from the OpenAPI spec, the spec is not very useful for automatic code generation.\nThis project aims to convert the official spec to an improved version with the following main features:\n\n- Definition of common components that are reused throughout the schema\n- Added pagination support\n- API-friendly tag names\n- Unique `operationId`s\n\nAs an added benefit, mainly from use of common components, the improved spec is much smaller (548 KiB vs 1.4 MiB) than the original.\n\n## Further Reading\n\n- [Link to the generated openAPI document](openapi/hcloud.json)\n- [Official API documentation](https://docs.hetzner.cloud/)\n- [OpenAPI spec document provided by Hetzner](https://docs.hetzner.cloud/spec.json)\n- [OpenAPI standard](https://swagger.io/specification/)\n\n## Use Cases\nThis API description is currently being used by the following projects:\n- [hcloud-rust](https://github.com/HenningHolmDE/hcloud-rust)\n  [![Crates.io](https://img.shields.io/crates/v/hcloud.svg)](https://crates.io/crates/hcloud)\n  [![Documentation](https://docs.rs/hcloud/badge.svg)](https://docs.rs/hcloud/)\n\n## Supported Endpoints\n\u003ctable style=\"text-align: center\"\u003e\n  \u003ctr height=\"80\"\u003e\n    \u003ctd\u003eactions\u003c/td\u003e\n    \u003ctd\u003ecertificates\u003c/td\u003e\n    \u003ctd\u003edatacenters\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr height=\"80\"\u003e\n    \u003ctd\u003efloating_ips\u003c/td\u003e\n    \u003ctd\u003eimages\u003c/td\u003e\n    \u003ctd\u003eisos\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr height=\"80\"\u003e\n    \u003ctd\u003eload_balancer_types\u003c/td\u003e\n    \u003ctd\u003eload_balancers\u003c/td\u003e\n    \u003ctd\u003elocations\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr height=\"80\"\u003e\n    \u003ctd\u003enetworks\u003c/td\u003e\n    \u003ctd\u003epricing\u003c/td\u003e\n    \u003ctd\u003eserver_types\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr height=\"80\"\u003e\n    \u003ctd\u003eservers\u003c/td\u003e\n    \u003ctd\u003essh_keys\u003c/td\u003e\n    \u003ctd\u003evolumes\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr height=\"80\"\u003e\n    \u003ctd\u003efirewalls\u003c/td\u003e\n    \u003ctd\u003eplacement_groups\u003c/td\u003e\n    \u003ctd\u003eprimary_ips\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n```\n/actions (GET)\n/actions/{id} (GET)\n/certificates (GET, POST)\n/certificates/{id} (DELETE, GET, PUT)\n/certificates/{id}/actions (GET)\n/certificates/{id}/actions/{action_id} (GET)\n/certificates/{id}/actions/retry (POST)\n/certificates/actions (GET)\n/certificates/actions/{id} (GET)\n/datacenters (GET)\n/datacenters/{id} (GET)\n/firewalls (GET, POST)\n/firewalls/{id} (DELETE, GET, PUT)\n/firewalls/{id}/actions (GET)\n/firewalls/{id}/actions/{action_id} (GET)\n/firewalls/{id}/actions/apply_to_resources (POST)\n/firewalls/{id}/actions/remove_from_resources (POST)\n/firewalls/{id}/actions/set_rules (POST)\n/firewalls/actions (GET)\n/firewalls/actions/{id} (GET)\n/floating_ips (GET, POST)\n/floating_ips/{id} (DELETE, GET, PUT)\n/floating_ips/{id}/actions (GET)\n/floating_ips/{id}/actions/{action_id} (GET)\n/floating_ips/{id}/actions/assign (POST)\n/floating_ips/{id}/actions/change_dns_ptr (POST)\n/floating_ips/{id}/actions/change_protection (POST)\n/floating_ips/{id}/actions/unassign (POST)\n/floating_ips/actions (GET)\n/floating_ips/actions/{id} (GET)\n/images (GET)\n/images/{id} (DELETE, GET, PUT)\n/images/{id}/actions (GET)\n/images/{id}/actions/{action_id} (GET)\n/images/{id}/actions/change_protection (POST)\n/images/actions (GET)\n/images/actions/{id} (GET)\n/isos (GET)\n/isos/{id} (GET)\n/load_balancer_types (GET)\n/load_balancer_types/{id} (GET)\n/load_balancers (GET, POST)\n/load_balancers/{id} (DELETE, GET, PUT)\n/load_balancers/{id}/actions (GET)\n/load_balancers/{id}/actions/{action_id} (GET)\n/load_balancers/{id}/actions/add_service (POST)\n/load_balancers/{id}/actions/add_target (POST)\n/load_balancers/{id}/actions/attach_to_network (POST)\n/load_balancers/{id}/actions/change_algorithm (POST)\n/load_balancers/{id}/actions/change_dns_ptr (POST)\n/load_balancers/{id}/actions/change_protection (POST)\n/load_balancers/{id}/actions/change_type (POST)\n/load_balancers/{id}/actions/delete_service (POST)\n/load_balancers/{id}/actions/detach_from_network (POST)\n/load_balancers/{id}/actions/disable_public_interface (POST)\n/load_balancers/{id}/actions/enable_public_interface (POST)\n/load_balancers/{id}/actions/remove_target (POST)\n/load_balancers/{id}/actions/update_service (POST)\n/load_balancers/{id}/metrics (GET)\n/load_balancers/actions (GET)\n/load_balancers/actions/{id} (GET)\n/locations (GET)\n/locations/{id} (GET)\n/networks (GET, POST)\n/networks/{id} (DELETE, GET, PUT)\n/networks/{id}/actions (GET)\n/networks/{id}/actions/{action_id} (GET)\n/networks/{id}/actions/add_route (POST)\n/networks/{id}/actions/add_subnet (POST)\n/networks/{id}/actions/change_ip_range (POST)\n/networks/{id}/actions/change_protection (POST)\n/networks/{id}/actions/delete_route (POST)\n/networks/{id}/actions/delete_subnet (POST)\n/networks/actions (GET)\n/networks/actions/{id} (GET)\n/placement_groups (GET, POST)\n/placement_groups/{id} (DELETE, GET, PUT)\n/pricing (GET)\n/primary_ips (GET, POST)\n/primary_ips/{id} (DELETE, GET, PUT)\n/primary_ips/{id}/actions/assign (POST)\n/primary_ips/{id}/actions/change_dns_ptr (POST)\n/primary_ips/{id}/actions/change_protection (POST)\n/primary_ips/{id}/actions/unassign (POST)\n/primary_ips/actions (GET)\n/primary_ips/actions/{id} (GET)\n/server_types (GET)\n/server_types/{id} (GET)\n/servers (GET, POST)\n/servers/{id} (DELETE, GET, PUT)\n/servers/{id}/actions (GET)\n/servers/{id}/actions/{action_id} (GET)\n/servers/{id}/actions/add_to_placement_group (POST)\n/servers/{id}/actions/attach_iso (POST)\n/servers/{id}/actions/attach_to_network (POST)\n/servers/{id}/actions/change_alias_ips (POST)\n/servers/{id}/actions/change_dns_ptr (POST)\n/servers/{id}/actions/change_protection (POST)\n/servers/{id}/actions/change_type (POST)\n/servers/{id}/actions/create_image (POST)\n/servers/{id}/actions/detach_from_network (POST)\n/servers/{id}/actions/detach_iso (POST)\n/servers/{id}/actions/disable_backup (POST)\n/servers/{id}/actions/disable_rescue (POST)\n/servers/{id}/actions/enable_backup (POST)\n/servers/{id}/actions/enable_rescue (POST)\n/servers/{id}/actions/poweroff (POST)\n/servers/{id}/actions/poweron (POST)\n/servers/{id}/actions/reboot (POST)\n/servers/{id}/actions/rebuild (POST)\n/servers/{id}/actions/remove_from_placement_group (POST)\n/servers/{id}/actions/request_console (POST)\n/servers/{id}/actions/reset (POST)\n/servers/{id}/actions/reset_password (POST)\n/servers/{id}/actions/shutdown (POST)\n/servers/{id}/metrics (GET)\n/servers/actions (GET)\n/servers/actions/{id} (GET)\n/ssh_keys (GET, POST)\n/ssh_keys/{id} (DELETE, GET, PUT)\n/volumes (GET, POST)\n/volumes/{id} (DELETE, GET, PUT)\n/volumes/{id}/actions (GET)\n/volumes/{id}/actions/{action_id} (GET)\n/volumes/{id}/actions/attach (POST)\n/volumes/{id}/actions/change_protection (POST)\n/volumes/{id}/actions/detach (POST)\n/volumes/{id}/actions/resize (POST)\n/volumes/actions (GET)\n/volumes/actions/{id} (GET)\n```\n\n## Quick Start\n\n```\nnpm run convert -- --output openapi/hcloud.json\n```\n\n## Usage with OpenAPI Generator\n\n[OpenAPI Generator on GitHub](https://github.com/OpenAPITools/openapi-generator)\n\n### Validate\n\n```\njava -jar \u003cpath\u003e/openapi-generator-cli.jar validate --input-spec openapi/hcloud.json\n```\n\n### Generate\n\n```\njava -jar \u003cpath\u003e/openapi-generator-cli.jar generate --input-spec openapi/hcloud.json --generator-name \u003cname\u003e --output \u003cpath\u003e\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMaximilianKoestler%2Fhcloud-openapi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FMaximilianKoestler%2Fhcloud-openapi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMaximilianKoestler%2Fhcloud-openapi/lists"}