Tags · hetznercloud/hcloud-python · GitHub
Skip to content

Tags: hetznercloud/hcloud-python

Tags

v2.27.0

Toggle v2.27.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
chore(main): release v2.27.0 (#701)

<!-- section-start changelog -->
### Load Balancers can now be created with existing Primary IPs

Primary IPs, which were previously available exclusively for Servers,
are now also available for Load Balancers. When creating a Load
Balancer, you can assign an [existing Primary
IP](https://docs.hetzner.cloud/reference/cloud#tag/primary-ips/list_primary_ips)
instead of having an IP address allocated automatically. Currently, you
cannot change the Primary IP once the Load Balancer has been created.

To support this change, we added the new `public_net` property to the
request body of the endpoint [POST
/load_balancers](https://docs.hetzner.cloud/reference/cloud#tag/load-balancers/create_load_balancer),
with the following child properties:

- `public_net.ipv4`: ID of an IPv4 Primary IP to assign to the Load
Balancer.
- `public_net.ipv6`: ID of an IPv6 Primary IP to assign to the Load
Balancer.

If you omit a property, a new Primary IP of that version is allocated
for the Load Balancer, as before.

A Primary IP can currently only be assigned when the Load Balancer is
created. It stays assigned for the entire lifetime of the Load Balancer.

Related to
https://docs.hetzner.cloud/changelog#2026-10-05-load-balancers-can-use-existing-primary-ips.

### Deleting a Load Balancer now returns an Action

> [!IMPORTANT]
> Please update all code that uses the `LoadBalancersClient.delete`
method to wait on the newly returned action.

As part of our work on supporting [existing Primary IPs for Load
Balancers](https://docs.hetzner.cloud/changelog#2026-10-05-load-balancers-can-use-existing-primary-ips),
deleting a Load Balancer is now tracked with an Action.

The endpoint [DELETE
/load_balancers/{id}](https://docs.hetzner.cloud/reference/cloud#tag/load-balancers/delete_load_balancer)
now returns a 201 status code with an Action in the response body,
instead of a 204 status code with an empty response body.

You can use the returned Action to track the progress of the deletion.

Related to
https://docs.hetzner.cloud/changelog#2026-10-05-delete-load-balancer-returns-action.

### Features

- allow creating load balancers with primary ips (#700)
([84e3a19](84e3a19))
- delete load balancer now returns an action (#700)
([84e3a19](84e3a19))

<!-- section-end changelog -->

---

<details>
<summary><h4>PR by <a
href="https://github.com/apricote/releaser-pleaser">releaser-pleaser</a>
🤖</h4></summary>

If you want to modify the proposed release, add you overrides here. You
can learn more about the options in the docs.

## Release Notes

### Prefix / Start

This will be added to the start of the release notes.

~~~~rp-prefix
### Load Balancers can now be created with existing Primary IPs

Primary IPs, which were previously available exclusively for Servers,
are now also available for Load Balancers. When creating a Load
Balancer, you can assign an [existing Primary
IP](https://docs.hetzner.cloud/reference/cloud#tag/primary-ips/list_primary_ips)
instead of having an IP address allocated automatically. Currently, you
cannot change the Primary IP once the Load Balancer has been created.

To support this change, we added the new `public_net` property to the
request body of the endpoint [POST
/load_balancers](https://docs.hetzner.cloud/reference/cloud#tag/load-balancers/create_load_balancer),
with the following child properties:

- `public_net.ipv4`: ID of an IPv4 Primary IP to assign to the Load
Balancer.
- `public_net.ipv6`: ID of an IPv6 Primary IP to assign to the Load
Balancer.

If you omit a property, a new Primary IP of that version is allocated
for the Load Balancer, as before.

A Primary IP can currently only be assigned when the Load Balancer is
created. It stays assigned for the entire lifetime of the Load Balancer.

Related to
https://docs.hetzner.cloud/changelog#2026-10-05-load-balancers-can-use-existing-primary-ips.

### Deleting a Load Balancer now returns an Action

> [!IMPORTANT]
> Please update all code that uses the `LoadBalancersClient.delete`
method to wait on the newly returned action.

As part of our work on supporting [existing Primary IPs for Load
Balancers](https://docs.hetzner.cloud/changelog#2026-10-05-load-balancers-can-use-existing-primary-ips),
deleting a Load Balancer is now tracked with an Action.

The endpoint [DELETE
/load_balancers/{id}](https://docs.hetzner.cloud/reference/cloud#tag/load-balancers/delete_load_balancer)
now returns a 201 status code with an Action in the response body,
instead of a 204 status code with an empty response body.

You can use the returned Action to track the progress of the deletion.

Related to
https://docs.hetzner.cloud/changelog#2026-10-05-delete-load-balancer-returns-action.
~~~~

### Suffix / End

This will be added to the end of the release notes.

~~~~rp-suffix
~~~~

</details>

Co-authored-by: Hetzner Cloud Bot <>

v2.26.0

Toggle v2.26.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
chore(main): release v2.26.0 (#697)

<!-- section-start changelog -->
### Features

- **load-balancer**: add health check diagnostic details (#696)
([80b74c9](80b74c9))

<!-- section-end changelog -->

---

<details>
<summary><h4>PR by <a
href="https://github.com/apricote/releaser-pleaser">releaser-pleaser</a>
🤖</h4></summary>

If you want to modify the proposed release, add you overrides here. You
can learn more about the options in the docs.

## Release Notes

### Prefix / Start

This will be added to the start of the release notes.

~~~~rp-prefix
~~~~

### Suffix / End

This will be added to the end of the release notes.

~~~~rp-suffix
~~~~

</details>

Co-authored-by: Hetzner Cloud Bot <>

v2.25.1

Toggle v2.25.1's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
chore(main): release v2.25.1 (#692)

<!-- section-start changelog -->
### Bug Fixes

- only send load balancer service health_check properties when defined
(#691)
([e3bf6f2](e3bf6f2))

<!-- section-end changelog -->

---

<details>
<summary><h4>PR by <a
href="https://github.com/apricote/releaser-pleaser">releaser-pleaser</a>
🤖</h4></summary>

If you want to modify the proposed release, add you overrides here. You
can learn more about the options in the docs.

## Release Notes

### Prefix / Start

This will be added to the start of the release notes.

~~~~rp-prefix
~~~~

### Suffix / End

This will be added to the end of the release notes.

~~~~rp-suffix
~~~~

</details>

Co-authored-by: Hetzner Cloud Bot <>

v2.25.0

Toggle v2.25.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
chore(main): release v2.25.0 (#688)

<!-- section-start changelog -->
### Features

- list network members (#687)
([9d5d21d](9d5d21d))

### Bug Fixes

- only send load balancer service certificates when defined (#690)
([c6bc24a](c6bc24a))

<!-- section-end changelog -->

---

<details>
<summary><h4>PR by <a
href="https://github.com/apricote/releaser-pleaser">releaser-pleaser</a>
🤖</h4></summary>

If you want to modify the proposed release, add you overrides here. You
can learn more about the options in the docs.

## Release Notes

### Prefix / Start

This will be added to the start of the release notes.

~~~~rp-prefix
~~~~

### Suffix / End

This will be added to the end of the release notes.

~~~~rp-suffix
~~~~

</details>

Co-authored-by: Hetzner Cloud Bot <>

v2.24.0

Toggle v2.24.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
chore(main): release v2.24.0 (#684)

<!-- section-start changelog -->
### Features

- add deprecation info to image (#683)
([3bddb0d](3bddb0d))

<!-- section-end changelog -->

---

<details>
<summary><h4>PR by <a
href="https://github.com/apricote/releaser-pleaser">releaser-pleaser</a>
🤖</h4></summary>

If you want to modify the proposed release, add you overrides here. You
can learn more about the options in the docs.

## Release Notes

### Prefix / Start

This will be added to the start of the release notes.

~~~~rp-prefix
~~~~

### Suffix / End

This will be added to the end of the release notes.

~~~~rp-suffix
~~~~

</details>

Co-authored-by: Hetzner Cloud Bot <>

v2.23.0

Toggle v2.23.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
chore(main): release v2.23.0 (#672)

### Removed deprecated Datacenter property from Server and PrimaryIP

Removed the deprecated Datacenter property from the Server and PrimaryIP
resources. Since the property was already removed from the Hetzner Cloud
API, we do not consider this a breaking change (see [changelog
entry](https://docs.hetzner.cloud/changelog#2026-07-01-removing-datacenters)).

> [!IMPORTANT]
> **Action required:** Please update all code that accesses
`server.datacenter` or `primary_ip.datacenter` to use the `location`
property instead, as shown below.

**Before:**

```python
server = client.server.get_by_id(5)
print(server.datacenter)

primary_ip = client.primary_ip.get_by_id(5)
print(primary_ip.datacenter)
```

**After:**

```python
server = client.server.get_by_id(5)
print(server.location)

primary_ip = client.primary_ip.get_by_id(5)
print(primary_ip.location)
```

### Features

- remove datacenter property from server and primary_ip (#668)
([abdadf3](abdadf3))
- add deprecation info to load balancer type (#674)
([aeebcf8](aeebcf8))

v2.22.0

Toggle v2.22.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
chore(main): release v2.22.0 (#662)

<!-- section-start changelog -->
### Datacenters resource is now deprecated

The endpoints `GET /v1/datacenters` and `GET /v1/datacenters/{id}` are
now deprecated and will be removed after 1 Oct. 2026. After this date,
requests to these endpoints will return `HTTP 410 Gone`.

The `DatacentersClient`, `Datacenter` and related classes are now
deprecated.

See the
[changelog](https://docs.hetzner.cloud/changelog#2026-06-02-datacenters-deprecated)
for more details.

### Features

- deprecate datacenters (#656)

<!-- section-end changelog -->

---

<details>
<summary><h4>PR by <a
href="https://github.com/apricote/releaser-pleaser">releaser-pleaser</a>
🤖</h4></summary>

If you want to modify the proposed release, add you overrides here. You
can learn more about the options in the docs.

## Release Notes

### Prefix / Start

This will be added to the start of the release notes.

~~~~rp-prefix
### Datacenters resource is now deprecated

The endpoints `GET /v1/datacenters` and `GET /v1/datacenters/{id}` are
now deprecated and will be removed after 1 Oct. 2026. After this date,
requests to these endpoints will return `HTTP 410 Gone`.

The `DatacentersClient`, `Datacenter` and related classes are now
deprecated.

See the
[changelog](https://docs.hetzner.cloud/changelog#2026-06-02-datacenters-deprecated)
for more details.
~~~~

### Suffix / End

This will be added to the end of the release notes.

~~~~rp-suffix
~~~~

</details>

Co-authored-by: Hetzner Cloud Bot <>

v2.21.0

Toggle v2.21.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
chore(main): release v2.21.0 (#659)

<!-- section-start changelog -->
### Features

- retry requests on api bad_gateway error (#658)

<!-- section-end changelog -->

---

<details>
<summary><h4>PR by <a
href="https://github.com/apricote/releaser-pleaser">releaser-pleaser</a>
🤖</h4></summary>

If you want to modify the proposed release, add you overrides here. You
can learn more about the options in the docs.

## Release Notes

### Prefix / Start

This will be added to the start of the release notes.

~~~~rp-prefix
~~~~

### Suffix / End

This will be added to the end of the release notes.

~~~~rp-suffix
~~~~

</details>

Co-authored-by: Hetzner Cloud Bot <>

v2.20.0

Toggle v2.20.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
chore(main): release v2.20.0 (#651)

<!-- section-start changelog -->
### Load Balancer HTTP Services now support `timeout_idle`

HTTP Services now support the field `timeout_idle`, which controls the
time a HTTP connection is allowed to idle before it is being dropped.

See the
[changelog](https://docs.hetzner.cloud/changelog#2026-04-30-load-balancers-http-idle-timeout-can-now-be-configured)
for more information.

### Features

- **load-balancer**: support `timeout_idle` http service field (#649)

<!-- section-end changelog -->

---

<details>
<summary><h4>PR by <a
href="https://github.com/apricote/releaser-pleaser">releaser-pleaser</a>
🤖</h4></summary>

If you want to modify the proposed release, add you overrides here. You
can learn more about the options in the docs.

## Release Notes

### Prefix / Start

This will be added to the start of the release notes.

~~~~rp-prefix
### Load Balancer HTTP Services now support `timeout_idle`

HTTP Services now support the field `timeout_idle`, which controls the
time a HTTP connection is allowed to idle before it is being dropped.

See the
[changelog](https://docs.hetzner.cloud/changelog#2026-04-30-load-balancers-http-idle-timeout-can-now-be-configured)
for more information.
~~~~

### Suffix / End

This will be added to the end of the release notes.

~~~~rp-suffix
~~~~

</details>

Co-authored-by: Hetzner Cloud Bot <>

v2.19.0

Toggle v2.19.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
chore(main): release v2.19.0 (#648)

### Primary IPs `assignee_type` behavior change

In the create Primary IP call, the `assignee_type` argument is now only
send when the `assignee_id` argument is set. The `assignee_type`
argument will stop defaulting to `server` in the near future, consider
explicitly setting this argument when needed.

As of 1 August 2026, the behavior of the Primary IP `assignee_type`
property will change, and will return `unassigned` when the Primary IP
is not assigned (when `assignee_id` is `null`). The goal is to
eventually assign Primary IPs to other resource types, not only to
`server`.

See the
[changelog](https://docs.hetzner.cloud/changelog#2026-04-27-primary-ips-will-return-unassigned)
for more details.

In addition, the Primary IP request body `assignee_type` property of the
operation [`POST
/v1/primary_ips`](https://docs.hetzner.cloud/reference/cloud#tag/primary-ips/create_primary_ip)
is now optional. Primary IPs created without `assignee_type` return
`server` until 1 August 2026, after this date, its value will be
`unassigned`.

See the
[changelog](https://docs.hetzner.cloud/changelog#2026-04-27-primary-ips-make-assignee_type-optional)
for more details.

### Features

- **primary-ip**: `assignee_type` behavior changed when creating a
primary ip (#647)