The ZoneControl API¶
The ZoneControl frontend communicates with the ZoneControl server application using the ZoneControl REST API. This API is the PowerDNS API with some additional endpoints for ZoneControl object like comments, and history.
Apart from that, ZoneControl
ZoneControl Endpoints¶
- GET /api/zonecontrol/info¶
Returns information for the frontend regarding enabled features of the server and some permissions for the user. This is used by the frontend to show or hide certain UI elements.
- Response JSON Object:
username (str) – Username of the logged in user.
is_admin (bool) – User is a staff user.
can_add_zones (bool) – User can create zones on at least one server.
can_add_zone_kinds (list(str)) – The kinds of zones this user can create.
show_advanced_dnssec (bool) – Whether this user had Advanced DNSSEC permissions.
can_add_ptr (bool) – Whether automatic PTR creation is enabled.
can_queue_axfr_retrieve (bool) – Whether or not the user can queue AXFR retrievals.
can_queue_notify (bool) – Whether or not the user can queue NOTIFY messages.
dnssec_in_overview (bool) – Whether or not DNSSEC is shown in the zones overview.
dnssec_advanced_default_algorithm (bool) – The default algorithm in the Advanced DNSSEC view.
dnssec_advanced_algorithms (bool) – The algorithms shown in the Advanced DNSSEC view.
nsec3param_default (bool) – The default value for NSEC3.
- POST /api/zonecontrol/login¶
This endpoint allows a login.
- Form Parameters:
username – Username to log in.
password – Password for the user.
- Status Codes:
200 OK – Login successful.
401 Unauthorized – Login failed.
On success, a JSON object is returned.
- Response JSON Object:
success (bool) – Always true on a login.
ZoneControl Endpoints in the PowerDNS API¶
- GET /api/v1/servers/{server_id}/zones/{zone_id}/_names/{name}/_comments/{rrtype}¶
Retrieve the comments for a certain record.
- Parameters:
server_id (str) – Name of the server
zone_id (str) – id (name) of the zone
name (str) – Name of the RRSet
rrtype (str) – RRType in textual format (e.g. A, AAAA, CNAME)
Returns a JSON object with one element
data
with contains an array of objects.- Response JSON Array of Objects:
server (str) – Name of the server this comment was made for.
zone (str) – Name of the zone this comment was made for.
name (str) – RRSet name.
type (str) – RRType.
timestamp (str) – Timestamp the comment was created.
user (str) – Username of the comment’s author.
comment (str) – The actual comment.
from-server (bool) – Whether or not the server was sent from the server, always true on a GET request.
- POST /api/v1/servers/{server_id}/zones/{zone_id}/_names/{name}/_comments/{rrtype}¶
Create a comment for a certain record. The request body must be a single JSON string with the comment. All database fields (user, timestamp etc.) will be filled by the server.
- Parameters:
server_id (str) – Name of the server
zone_id (str) – id (name) of the zone
name (str) – Name of the RRSet
rrtype (str) – RRType in textual format (e.g. A, AAAA, CNAME)
Returns all comments as if
the GET for the same URL
was called.
- DELETE /api/v1/servers/{server_id}/zones/{zone_id}/_names/{name}/_comments/{rrtype}/_comment/{comment_id}¶
Delete the comment with id
comment_id
- Parameters:
server_id – Name of the server
zone_id – id (name) of the zone
name – Name of the RRSet
comment_id – id of the comment
- GET /api/v1/servers/{server_id}/zones/{zone_id}/_history¶
Get all versions for the zone.
- Parameters:
server_id – Name of the server
zone_id – id (name) of the zone
Returns a JSON object with one element
data
with contains an array of zone versions.- Response JSON Array of Objects:
id (int) – id of the ZoneVersion
serial (int) – SOA Serial of the zone
action (string) –
The action of this version of the zone, one of
- create:
Zone was created at this version
- delete:
Zone was deleted at this version
- settings:
Zone settings (e.g. kind) was changed
- metadata:
Zone Metadata was changed
- dnssec_enable:
DNSSEC was enabled
action_display (string) – The action as a user-readable string, can be null.
can_be_restored (bool) – Whether or not the zone can be rolled back to this version.
comment (string) – Comment made when the version was created.
timestamp (str) – Timestamp the version was created.
username (str) – Name of the user who created the version, can be null.
external (bool) – True if the version was not created through a change in ZoneControl.
- GET /api/v1/servers/{server_id}/zones/{zone_id}/_history/diff/{version_2}¶
- GET /api/v1/servers/{server_id}/zones/{zone_id}/_history/diff/{version_1}/{version_2}¶
Get a difference between zone versions.
- Parameters:
server_id – Name of the server
zone_id – id (name) of the zone
version_1 – Version to compare to
version_2 – Diff to retrieve
- POST /api/v1/servers/{server_id}/zones/{zone_id}/_history/restore/{version}¶
Restore a Zone to the provided version.
- Parameters:
server_id – Name of the server
zone_id – id (name) of the zone
version – Version to restore to
When restoration succeeds, a HTTP 200 response is returned with the following JSON:
- Response JSON Object:
success (bool) – Whether or not the restoration succeeded.
new_version_recorded (bool) – Whether or a new version was recorded.
new_version (int) – id of the new version that was recorded.
new_serial (int) – SOA serial of the zone after the restoration.
warning (str) – A warning if a failure occurred.
warning_details (str) – More warning information.
API Tokens¶
Users can be assigned API tokens from the administrative interface. This token
can be used in HTTP requests to the ZoneControl server in the X-Api-Key
header. This allows users to write their own applications that interact with the
PowerDNS API while still keeping the Role permissions in place.