NAME

WWW::Hetzner::Cloud::API::Zones - Hetzner Cloud DNS Zones API

VERSION

version 0.001

SYNOPSIS

use WWW::Hetzner::Cloud;

my $cloud = WWW::Hetzner::Cloud->new(token => $ENV{HETZNER_API_TOKEN});

# List all zones
my $zones = $cloud->zones->list;

# Create a zone
my $zone = $cloud->zones->create(
    name   => 'example.com',
    ttl    => 3600,
    labels => { env => 'prod' },
);

# Zone is a WWW::Hetzner::Cloud::Zone object
print $zone->id, "\n";
print $zone->name, "\n";

# Access RRSets directly from zone object
my $records = $zone->rrsets->list;
$zone->rrsets->add_a('www', '1.2.3.4');

# Update zone
$zone->name('newdomain.com');
$zone->update;

# Delete zone
$zone->delete;

DESCRIPTION

This module provides the API for managing Hetzner Cloud DNS zones. All methods return WWW::Hetzner::Cloud::Zone objects.

NAME

WWW::Hetzner::Cloud::API::Zones - Hetzner Cloud DNS Zones API

METHODS

list

my $zones = $cloud->zones->list;
my $zones = $cloud->zones->list(name => 'example.com');
my $zones = $cloud->zones->list(label_selector => 'env=prod');

Returns an arrayref of WWW::Hetzner::Cloud::Zone objects. Optional parameters: name, label_selector, sort, page, per_page.

list_by_label

my $zones = $cloud->zones->list_by_label('env=production');

Convenience method to list zones by label selector.

get

my $zone = $cloud->zones->get($id);

Returns a WWW::Hetzner::Cloud::Zone object.

create

my $zone = $cloud->zones->create(
    name   => 'example.com',  # required
    ttl    => 3600,           # optional (default TTL)
    labels => { env => 'prod' },  # optional
);

Creates a new DNS zone. Returns a WWW::Hetzner::Cloud::Zone object.

update

$cloud->zones->update($id, name => 'newdomain.com', labels => { env => 'dev' });

Updates zone name or labels. Returns a WWW::Hetzner::Cloud::Zone object.

delete

$cloud->zones->delete($id);

Deletes a zone and all its RRSets.

export

my $zonefile = $cloud->zones->export($id);

Exports the zone as a standard zone file format.

rrsets

my $rrsets = $cloud->zones->rrsets($zone_id);
my $records = $rrsets->list;

Returns a WWW::Hetzner::Cloud::API::RRSets object for managing records in this zone.

SUPPORT

Source Code

The code is open to the world, and available for you to hack on. Please feel free to browse it and play with it, or whatever. If you want to contribute patches, please send me a diff or prod me to pull from your repository :)

https://github.com/Getty/p5-www-hetzner

git clone https://github.com/Getty/p5-www-hetzner.git

AUTHOR

Torsten Raudssus <torsten@raudssus.de>

COPYRIGHT AND LICENSE

This software is copyright (c) 2026 by Torsten Raudssus.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.