PanelDNS Reseller Handbook
A practical guide for hosting companies and agencies using PanelDNS to manage DNS for their customers.Table of Contents
- What PanelDNS Does for Resellers
- Logging In
- Plans and Limits
- Branding Your Portal
- Team Management
- Connecting DNS Servers
- Managing Sub-Clients
- DNS Zones
- Working with DNS Records
- Zone Tools and Automation
- Change Control and Approval Workflows
- DNS Failover Monitoring
- Uptime Monitors (Standalone)
- DMARC Wizard
- Domain & SSL Expiry Monitoring
- Geo-Routing Policies
- Zone Mirrors
- Outbound Webhooks
- Notification Channels
- REST API and API Tokens
- Settings Reference
- Frequently Asked Questions
- Status Page
- Web Analytics
- Portal Language
- Domain Reputation & Zone Suspension Notices
- Legal Compliance — Sub-client Consent Setup
- Account Closure & Data Rights
- Backups & Zone History
1. What PanelDNS Does for Resellers
PanelDNS is a white-label DNS management platform. As a reseller you get:- A branded dashboard for your team to manage DNS zones and records across 22 DNS providers.
- A separate white-label portal that your customers (sub-clients) log into — branded with your logo, colours, and optionally your own domain (e.g.
portal.acmedns.com). - One unified interface that works whether your DNS infrastructure is hosted on Cloudflare, DirectAdmin, cPanel, PowerDNS, Amazon Route 53, or any other supported provider.
- Sub-client accounts with configurable zone limits, invitation emails, and a self-contained portal experience — your customers never see the PanelDNS name.
2. Logging In
Dashboard (your team)
The main dashboard URL is provided by your platform operator, or your custom portal domain if you have configured one. Supported authentication methods:
First login: After signing up, you are the org owner. Invite team members from /team before sharing the dashboard.
Dark mode and interface preferences
The reseller dashboard supports light and dark themes. Click the sun / moon icon in the top-right corner of the topbar to toggle between them. The dashboard defaults to light; your choice is remembered across page reloads and sessions, and is shared with the sub-client portal view — so when you impersonate a sub-client or log in as one, the same theme applies.Interface language
The Interface language picker in Settings sets the language your dashboard is displayed in. Choose from seven languages: English, Español (Spanish), Français (French), Deutsch (German), Português (Portuguese), 简体中文 (Simplified Chinese), and 繁體中文 (Traditional Chinese). Your selection is saved to your account and applies the next time the dashboard loads.Command palette
Press ⌘K (Mac) or Ctrl+K (Windows / Linux) from anywhere in the dashboard to open the command palette, or click the Search… button in the top bar. Type at least two characters to search your zones by name and your sub-clients by name or email; up to ten matches are shown. Use the arrow keys to move through results and Enter to open the selected one. Press Escape to close without navigating.Dashboard KPI tiles
The dashboard header shows your headline KPI tiles, each with a live sub-label giving you at-a-glance context beneath the main figure:- Zones — how many you have created this month
- DNS records — how many were added today
- Sub-clients — the number of pending invites awaiting acceptance
- Team seats — your seat usage vs. your plan limit
Getting started checklist
When your account is new, a dismissible Getting started checklist appears on the dashboard home to guide you through initial setup.Brand your portal
Confirm your nameservers
Connect a DNS server
Create your first zone
Invite your first sub-client
Registration Form
When creating your account at/register, you will be asked for:
Sub-client portal
Sub-clients access a separate portal at:https://your-platform-domain.com/portal/{your-slug}/login(default), orhttps://portal.yourdomain.com/loginif you have configured a custom portal domain (Starter plan and above).
3. Plans and Limits
Resource limits
/billing for your current plan.Agency Bundled is a hidden admin-assigned plan — resellers assigned this plan receive full Agency-tier features and full Agency resource limits (2000 zones, unlimited sub-clients, unlimited seats) at $0 as a bundle with their hosting package. It does not appear in the public plan selector./billing.Feature gates
Plan usage
The Plan Usage panel (on your dashboard and on/billing) shows how much of each limit you
have consumed — zones, sub-clients, seats, API tokens, and so on — as live meters against your
plan’s caps.
If your account is a platform / operator account rather than a normal subscription, the
panel instead reads “Platform · Unlimited” and every meter shows the infinity (∞) symbol
in place of a numeric cap. Standard reseller plans always show real usage versus your actual
limits.
Upgrading and downgrading
Go to/billing to view your current usage against plan limits. Click Upgrade to open Stripe Checkout. To downgrade or cancel, click Manage plan to open the Stripe Customer Portal. Invoices are available for download from the same page.
Features your platform operator can switch off
Separately from your plan, the platform operator can switch some features off for the whole platform: passkey sign-in, API tokens (and with them the REST API and the MCP server), outbound webhooks, zone templates and the marketplace, change scheduling, the AI DNS Wizard and query analytics. A switched-off feature disappears from the sidebar and menus, and opening its page directly shows ”… is turned off on this platform”. Your plan cannot turn it back on; ask the operator.4. Branding Your Portal
White-label your sub-client-facing portal so it looks like your own product. Go to Settings → Branding.Brand name
Set a brand name (for example, “AcmeDNS”). This replaces “PanelDNS” in the sidebar, email subjects, and portal page titles your sub-clients see.Logo
Upload a PNG, JPG, or WEBP file (maximum 2 MB). The logo appears in the portal header and on invitation/transactional emails to sub-clients. Keep the logo wide rather than square for the best fit.Brand colour
Set a hex colour code. This is applied as the primary CSS variable — it affects buttons, active nav items, and link colours in the sub-client portal.Custom portal domain
Available on Starter and above. Direct your sub-clients to a domain you control (e.g.portal.acmedns.com) rather than a paneldns.com URL.
Setup steps:
-
Go to Settings → Branding → Portal domain, enter your desired subdomain (e.g.
portal.acmedns.com), and save. -
At your DNS registrar or DNS provider, add a CNAME record:
Copy the target from the hint under the Portal domain field — PanelDNS accepts only that exact name. Pointing the CNAME at any other name, such as the platform’s bare domain, is the most common mistake: the badge stays on Pending and visitors get an SSL error.
- PanelDNS detects the CNAME automatically. The badge in Settings changes from Pending to Active once propagation is confirmed (usually under 5 minutes). SSL is provisioned automatically — no certificate management required on your side.
Cookie Policy URL
You can set a dedicated Cookie Policy URL in Settings → Advanced → Sub-client Portal Legal, next to your Terms and Privacy Policy URLs (it must start withhttps://; before v3.103.3 the field was shown but not saved). This URL is linked from the cookie consent banner shown to your sub-clients on the portal.
- If you have a separate cookie policy page (common when using GA4 or other tracking), enter its URL here.
- If left blank, the banner falls back to your Privacy Policy URL.
- The banner on your portal never mentions PanelDNS or links to the platform’s privacy policy — it uses your own URLs exclusively.
localStorage key that stores the visitor’s cookie preference on your portal is brand-neutral and does not contain paneldns.Vanity nameservers (Pro and above)
Custom NS hostnames (e.g.ns1.yourdomain.com) let your brand appear in clients’ NS records instead of generic provider NS names.
- Go to Settings → Vanity Nameservers and enter your NS hostnames (e.g.
ns1.yourdomain.com). - Select which DNS server these hostnames should point to.
- Click Save & Push Nameservers.
- A Registrar Setup Guide appears below the save button showing the exact glue records to create — e.g.
A ns1.yourdomain.com → 1.2.3.4. Each row has a Copy button. Take these values to your domain registrar:- Namecheap → Domain → Private DNS
- GoDaddy → My Products → Domain → Nameservers → Add Nameserver
- Cloudflare Registrar → DNS → Nameservers → Custom
- PanelDNS checks hourly. The ”⚠ Glue not detected” badge changes to ”✓ Glue verified” once propagation completes (24–48 hours).
5. Team Management
Go to/team to manage who has access to your PanelDNS dashboard.
Roles
Inviting team members
- Click Invite member.
- Enter the person’s email address and select their role.
- Click Send invitation. They receive an email with a link to set their password and join your org.
Changing a member’s role
Pick the new role from the dropdown next to a member’s name; it saves as soon as you choose. The owner’s role cannot be changed, and you cannot change your own.Removing a member
Click Remove next to the member and confirm. They lose access to this organisation immediately. The owner cannot be removed, and you cannot remove yourself.6. Connecting DNS Servers
Go to/servers to add and manage the DNS providers you use. This page is labelled
DNS Servers in the sidebar navigation (it was previously called “Providers”).
PanelDNS supports 22 providers: Cloudflare, PowerDNS, DigitalOcean, Hetzner, Linode, Vultr, Bunny DNS, NS1, DNS Made Easy, Namecheap, Amazon Route 53, Azure DNS, Google Cloud DNS, cPanel/WHM, cPanel DNS Only, DirectAdmin, Plesk, HestiaCP, ISPConfig, CyberPanel, Virtualmin, and BIND via SSH.
Platform-global servers (configured by the PanelDNS operator) are available to all resellers automatically. Servers you add at /servers are private to your organisation.
Adding a server
- Click Add server.
- Select the provider type from the dropdown.
- Fill in the required credentials. The form adapts to the selected provider — for example, Route 53 prompts for Access Key ID and Secret Access Key; Google Cloud DNS prompts for a Service Account JSON; Cloudflare prompts for an API Bearer token.
- Click Test connection to validate the credentials before saving.
- Click Save.
Geo-routing servers (Agency)
PowerDNS servers with the “Supports Geo Routing” flag enabled appear as eligible targets when configuring geo-routing policies. This requires the PowerDNS GeoIP backend to be configured on the server. Contact your PowerDNS administrator for setup details.7. Managing Sub-Clients
Go to/clients to manage the end customers on your plan.
Creating a sub-client
- Click New client.
- Enter their name, email address, and an initial portal password.
- Set a zone limit. Enter
0for unlimited (subject to your own plan’s zone cap). - Click Create.
Password policy: portal passwords must be at least 12 characters. This applies to the initial password you set on the dashboard form, to the optionalpasswordfield of thePOST /api/v1/sub-clientsAPI endpoint, and to the password a sub-client chooses themselves when they follow the portal invitation link.
Inviting a sub-client to the portal
After creating a sub-client account, click Invite to portal. They receive an email with a link to set their password and access the sub-client portal. The Status column showsInvited once the email is sent, and updates to Active once they accept.
Sub-clients log in to the portal branded with your logo and colours. They can manage only the zones assigned to them.
Assigning zones to a sub-client
From the client detail page, use the Assign zone button to attach an existing zone to that client. You can also set thesub_client_id when creating a zone from the zone creation form.
Zones assigned to a client appear in that client’s portal. A zone can only be assigned to one client at a time. To reassign it, remove the existing assignment first.
Editing and deleting sub-clients
From the client list or detail page, click Edit to update their name, zone limit, record limit, or status. Click Delete to remove the client. Deleting a client does not delete their zones — zones revert to unassigned and remain in your account.Logging in as a sub-client
You can log in as any of your sub-clients to see exactly what they see in the portal — useful for troubleshooting, onboarding support, or verifying that a zone looks correct from their perspective. How to impersonate a sub-client:- Go to Sub-Clients in the sidebar.
- Find the client you want to log in as. Only Active clients appear with the “Login as” option.
- Click Login as next to their name.
- You are now inside the portal as that sub-client. An amber banner at the top of every page reads:
⚠ Impersonating: [client name or email]
- Browse the portal, check their zones, or reproduce any issue they are experiencing.
- When you are done, click Stop impersonating in the amber banner. You are returned to your own reseller dashboard session.
- Only the reseller account that owns the sub-client can impersonate them. You cannot impersonate sub-clients belonging to another organisation.
- Suspended sub-clients cannot be impersonated. Reactivate them first if you need access.
- Your impersonation session is completely separate from the sub-client’s own session — they are not affected or logged out while you are viewing their account.
- Platform admins can impersonate any sub-client across all organisations.
Sub-client Bulk CSV Import
Navigate to: Dashboard → Sub-Clients → Import CSV Create multiple sub-clients in one operation by uploading a CSV file. CSV format:Download the template
Fill in your sub-client data
locale column is optional.Upload and import
Review results
Usage Report Export
Navigate to: Dashboard → Usage → Export Download usage data for all sub-clients in your organisation.CSV export
sub_client_name, email, zones, records, status. Opens in any spreadsheet application.PDF export
Email Template Editor
Navigate to: Dashboard → Email Templates Customise the subject and body of emails sent to your sub-clients. Supported events:White-label Nameserver Wizard
Navigate to: Dashboard → Nameserver Wizard Configure the nameservers displayed to your sub-clients as their zone’s NS records.Enter your nameservers
ns1.yourcompany.com), maximum 253 characters.Verify
Create glue records
ns1.yourcompany.com to your server’s IP address. Contact your registrar’s support for instructions.Save
Bulk Sub-client Actions
Navigate to: Dashboard → Sub-Clients Manage multiple sub-clients at once using the checkbox select and bulk action bar.Select sub-clients
Use the action bar
Apply the action
Clear selection
suspended — they cannot log into the portal. Unsuspend restores active status.8. DNS Zones
Creating a zone
Go to/zones/create.
- Enter the domain name (e.g.
example.com). - Select the DNS server (provider) where the zone will be hosted.
- Optionally select a zone template to pre-populate standard records.
- Click Create zone.
Bulk zone import
Go to/zones/bulk-import to discover and import zones in batch from a provider API.
- Select the provider.
- Click Discover zones — PanelDNS queries the provider API and lists all zones it finds.
- Select the zones you want to import.
- Click Import selected (maximum 100 per request).
Bulk Panel Onboarding
Go to/panel-onboard (or click 🖥️ Panel Onboard on the Zones page) to bulk-create zones directly from a connected hosting panel server.
Supported panels: cPanel/WHM, DirectAdmin, Plesk, HestiaCP, ISPConfig, CyberPanel, Virtualmin.
Pre-requisite: the panel server must already be added under DNS Servers (/servers) and must be one of the seven panel-type providers listed above.
Select the panel server
Discover domains
Select domains
Choose a target DNS server
Optional: create sub-clients
Start onboarding
- Created / Skipped / Failed counters and a percentage progress bar.
- The currently processing domain (while running).
- A Failed domains table when any domains could not be created, showing the error message per domain.
Zone list features
The/zones list page includes:
- Search and filter by zone name, status, provider, sub-client, or tags.
- Bulk actions: suspend, unsuspend, or delete up to 200 zones at once using the checkboxes.
- Sync Status dashboard at
/zones/sync-status: a colour-coded view of when each zone was last synchronised with its provider, useful for spotting stale mirrors or missed syncs.
9. Working with DNS Records
The zone detail page at/zones/{id} is the main workspace for a zone.
Viewing and editing records
The Records tab shows a table of all records: name, type, content, TTL, and priority. Click the edit icon on any row to open the edit form inline. Click the delete icon to remove a record. Protected records (marked with a lock icon) cannot be modified by sub-clients or editors. Admins and owners can lock or unlock individual records from the admin-facing zone view.Adding a record
Click Add record to open the create form. Fill in the type (A, AAAA, CNAME, MX, TXT, SRV, CAA, NS, etc.), name, content, and TTL. Click Save.Bulk TTL editor
To change the TTL of multiple records at once:- Select the records using the row checkboxes.
- Click Bulk TTL.
- Enter the new TTL in seconds.
- Click Apply (maximum 200 records per operation).
Import and export
- Export: Downloads the zone as a BIND-format zone file (
.txt). Available from the zone detail page. - Import: Upload a BIND zone file to bulk-create or replace records. Imported records are merged with existing ones.
CSV record import
Click CSV Import to upload a spreadsheet of records. The expected column order is:name, type, content, ttl, priority. Rows with invalid data are skipped and listed in the result report.
Propagation checker
Click the lightning bolt icon next to any record to check how it has propagated across public resolvers. PanelDNS queries multiple resolvers in different regions and displays the results. The check runs in the background and results appear in the UI when ready.10. Zone Tools and Automation
The zone detail page provides a set of specialist tools. Access them via the tabs or action buttons on the page.Email Wizard
Click Email Wizard (envelope icon) for a guided flow to configure email DNS records:- Select your email provider from the preset list (or enter custom values).
- Preview the MX, SPF, DKIM, and DMARC records that will be created.
- Click Apply to create all records in one step.
SPF Builder
A visual editor for SPF records. Addinclude:, ip4:, ip6:, and other mechanisms using the form controls. The tool assembles a valid SPF string and saves it as a TXT record. It warns you if the resulting record exceeds the 10-lookup limit.
DNS Wizard (AI) — Pro and above
Click DNS Wizard and describe what the client’s domain needs in plain language — for example: “This site runs on Google Workspace, has a Shopify store, and uses Mailchimp for newsletters.” The wizard uses an AI model (configurable in Platform Settings: Anthropic, OpenAI, Gemini, or a self-hosted Ollama instance) to generate the appropriate records and presents a diff of what will be added. Review it, then click Apply to create the records.Note: Always review AI-generated records before applying. The wizard is a productivity aid, not a replacement for DNS expertise.
CAA Wizard
Click the 🛡 CAA button on the zone detail page to build CAA (Certification Authority Authorisation) records without needing to know the wire format.- Select the certificate authorities you want to allow for this zone. Common options include Let’s Encrypt, ZeroSSL, DigiCert, and Sectigo.
- Optionally tick Deny all CAs to block all public certificate issuance entirely — useful for internal or parked domains.
- Enter a violation report address (optional): a
mailto:email address or anhttps://URL. CAs that receive a mis-issuance request for your domain will send a notification there. - Review the CAA record preview and click Apply to create it.
Tip: If you use Cloudflare, Fastly, or another CDN that manages SSL on your behalf, confirm with them which CA they require before applying a CAA record — they may need their own CA included in the list.
Zone Audit
Click Zone Audit for a DNS compliance report on the zone. The audit checks:- SPF record presence and correctness (warns if
+allis used). - DKIM records for each MX sender domain.
- DMARC alignment.
- CAA record presence.
- DNSSEC status (if the provider supports it).
- NS records matching expected glue.
- SOA values within RFC-recommended ranges.
History and Snapshots
Every record change creates a snapshot. The History card on the zone detail page shows a timestamped list of the most recent snapshots and who triggered each one. To roll back:- Click the snapshot you want to restore to.
- Review the diff showing what will change.
- Click Restore to apply it.
DNSSEC
DNSSEC cryptographically signs your DNS records so resolvers can verify they haven’t been tampered with (prevents cache poisoning). After enabling, you must add a DS record to your domain registrar to complete the chain of trust. Enabling DNSSEC:- On the zone detail page, scroll to the DNSSEC card.
- Click Enable DNSSEC.
- PanelDNS calls your DNS provider’s API to enable DNSSEC. Once enabled, the DS record value is fetched and displayed.
- Go to Settings → Registrar Profiles.
- Click Add Profile, choose your registrar type, enter the required credentials (API key, username/password etc.), and optionally set it as the default for all zones.
- On the zone detail page’s DNSSEC card, choose the registrar from the dropdown and click Generate support email (TPP Wholesale) or Push DS (API-backed registrars).
- Namecheap: Domains → Manage → Advanced DNS → DNSSEC tab → Add DS record
- GoDaddy (manual): My Products → DNS → DNSSEC → Add
- Cloudflare Registrar: Zone → DNS → DNSSEC (auto-detects when Cloudflare DNS is used)
- Other registrars: look for “DNSSEC” or “DS Records” in your domain management panel
Registrar Sync
After configuring a registrar profile (see Setting up a registrar profile above), open Registrar Sync (/settings/registrar-sync, also reachable from the Registrar Sync button on the Registrar Profiles page) to import domains, sync nameservers, and enable automatic zone creation for your registrar account.
Setting up registrar sync
Add a registrar profile
Load Domains
Sync Missing Zones
Sync Nameservers (optional)
Enable Auto-Sync (optional)
Automatic background jobs
Once a registrar profile has Auto-Sync enabled, one job runs on a schedule without manual action:- RegistrarSyncJob — runs daily to discover newly registered domains and create PanelDNS zones for them.
Zone Clone
Click Clone zone to copy records from this zone to a new zone:- Enter the destination zone name.
- Optionally select which record types to copy (all types are selected by default).
- Click Clone.
Zone Migration
Click Migrate zone to move the zone to a different DNS provider:- Select the target server.
- PanelDNS re-creates all records on the new provider.
- The zone’s server association is updated.
Suspend and Unsuspend
Suspended zones are inaccessible to sub-clients. Records remain in the database but the sub-client portal shows the zone as suspended and does not allow changes. Use this when a client’s account is overdue or has violated terms of service.Query Analytics (Pro and above)
The Analytics tab on the zone detail page shows DNS query volume, top queried record types, NXDOMAIN rate, and an hourly sparkline. This data is available only for zones hosted on PanelDNS-managed nameservers (PowerDNS cluster with the Lua query hook enabled). Zones on external providers (Cloudflare, Route 53, etc.) do not have analytics — those providers own the query data.Account-wide Analytics page (Pro and above)
The Analytics item in the sidebar (under DNS) aggregates query statistics across all of your zones in one place — no need to open each zone individually. It shows:- Total queries and an average per day over the selected period
- Active zones — how many of your zones received traffic
- NXDOMAIN rate — the share of lookups that returned “no such record” (a high rate can mean missing records or stale references)
- Daily query volume bar chart
- Query types breakdown and your busiest zones
11. Change Control and Approval Workflows
Approval workflow (Starter and above)
When a team member with the Editor role creates or edits a record, the change is queued as a pending change rather than applied immediately. Owners and admins review pending changes at/pending-changes.
For each pending change:
- A diff shows exactly what will be added, modified, or removed.
- Click Approve to apply the change to the provider.
- Click Reject to discard it (the editor is notified).
Enabling and disabling approval workflows
Approval workflows are on by default when your plan includes them. To toggle:- Go to Settings → Portal & Team Options
- Check or uncheck Require approval for editor record changes
- Click Save Options
Change scheduling (Pro and above)
When creating or editing a record, check Schedule for later and set a future date and time. The change is stored withstatus = scheduled. The ApplyScheduledChanges cron job runs at the configured interval and applies due changes automatically. Scheduled changes appear in the zone’s record list with a clock icon until they are applied.
Freeze windows (Pro and above)
Freeze windows prevent DNS changes during critical periods (for example high-traffic events or change-freeze policies). Set time windows during which no DNS changes are allowed on a zone.- Open the zone detail page at
/zones/{id}and choose Tools → Freezes (the same list also appears in the Freeze Windows card further down the page). - Under Add freeze window, set Starts at (it must be in the future), Ends at, and an optional Reason (e.g. “Black Friday traffic — no changes”).
- Click Add Freeze Window.
12. DNS Failover Monitoring
Available on Pro (up to 10 monitors) and Agency (unlimited). Go to/monitors.
A failover monitor watches an A or AAAA record and automatically swaps the IP to a fallback address if the primary becomes unreachable.
Creating a monitor
- Click New monitor.
- Select the zone and record to monitor.
- Choose the check type:
- HTTP: Sends a GET request to a URL and checks for an expected HTTP status code.
- TCP: Opens a connection to a host and port.
- Ping (ICMP): Sends ICMP echo requests to the IP address.
- Set the check interval (in seconds), timeout, and consecutive failure threshold (how many failures must occur before the failover triggers).
- Enter the Primary IP (the normal value) and Fallback IP (the replacement value).
- Click Save.
How failover works
When the failure threshold is reached, PanelDNS automatically updates the monitored record’s content to the fallback IP using the sameZoneManager::updateRecord() path as a manual edit — it works across all 22 providers with no provider-specific code. A real-time alert is broadcast to the dashboard (MonitorTripped event via Reverb).
When the primary IP becomes reachable again, the record is restored automatically.
Tip: Set a low TTL (60–300 seconds) on monitored records before enabling failover. A high TTL means caches hold the old IP long after the swap occurs, delaying recovery.
Pausing and resuming
Click Pause on a monitor to suspend checking without deleting the configuration. This is useful during planned maintenance.13. Uptime Monitors (Standalone)
Available on plans where Failover monitoring is enabled. Go to/monitors.
Standalone uptime monitors check any URL on a schedule (every 30 seconds to 60 minutes) and alert you by email when it goes down — without needing a DNS record swap. Use these for websites, APIs, or services that are not in PanelDNS zones.
Creating a standalone monitor
Go to Monitors
Create a monitor
http:// or https://), check interval (30 seconds to 60 minutes), and consecutive-failure threshold (default: 3).Save
How alerts work
When the failure threshold is reached, PanelDNS emails your organisation’s notification address with the monitor name, URL, and failure time. A recovery email is sent when the endpoint responds successfully again.Pausing and resuming
Click Pause on any monitor to suspend checking without deleting it. Useful during planned maintenance windows.14. DMARC Wizard
The DMARC wizard builds and applies a_dmarc TXT record for a zone based on your policy choices. It sits alongside the CAA wizard and Email wizard on the zone detail page.
Running the wizard
Open the wizard
Choose policy
none (monitor only), quarantine (send to spam), or reject (block). Start with none to collect reports without affecting mail flow. Move to quarantine or reject after reviewing reports for 2–4 weeks.Set aggregate report address
rua). This receives daily XML summary reports from receiving mail servers. Use a dedicated inbox or a DMARC reporting service address.Optional settings
ruf), percentage (pct), subdomain policy (sp), and DKIM/SPF alignment modes.Apply
_dmarc.{zone} TXT record.Recommended starting policy
Start withp=none and monitor the aggregate reports for 2–4 weeks before moving to quarantine or reject.
What the record looks like
ruf, pct, sp, adkim, aspf) are added only when you set them. A percentage of 100 and relaxed alignment are left out of the record because they are the defaults.
15. Domain & SSL Expiry Monitoring
PanelDNS automatically tracks expiry dates for domains and SSL certificates and warns you before they lapse.Domain expiry
When a registrar is connected (see Registrar Sync) and Auto-Sync is enabled, PanelDNS retrieves the expiry date for each domain. Domains expiring within 60 days show a badge on the zones list. You receive an email alert once a domain is within 30 days of expiry, repeated roughly weekly until it is renewed.SSL certificate expiry
PanelDNS checks the SSL certificate on port 443 for each active zone once per week. Zones expiring within 60 days show an SSL badge on the zones list. Email alerts begin once a certificate is within 30 days of expiry and are repeated roughly weekly until it is renewed. SSL checks run silently — zones without HTTPS (HTTP-only or no web server) are skipped without error.Alert emails
Both expiry alerts go to the Notification address set in Settings → Email (Email & notifications). Make sure this is a monitored inbox.16. Geo-Routing Policies
Available on Agency only, and only for zones hosted on PanelDNS-managed nameservers (PowerDNS cluster with GeoIP backend). Geo-routing lets you route A or AAAA queries to different IP addresses depending on the visitor’s country or continent. For example, route European visitors to a Frankfurt server and North American visitors to a New York server.Creating a policy
- On the zone detail page, click Geo-Routing → New policy.
- Select the record name and type (A or AAAA).
- Add rules. Each rule has:
- Region codes: One or more
country/XXorcontinent/XXcodes (e.g.country/US,country/CA,continent/EU). - Content: The IP address to return for visitors matching this rule.
- Priority: Lower numbers have higher priority. Use this when rules overlap.
- Region codes: One or more
- Add a default rule with no region restriction — this is the fallback for visitors who do not match any other rule. A default rule is required.
- Click Save and deploy.
Important: Geo-routing operates at the DNS level — it routes queries, not HTTP traffic. Visitors’ authoritative resolver location is used, not their actual IP. This is accurate at country level but not at city level. For city-level routing, use a provider with native anycast or HTTP-level routing.
Enabling and disabling policies
Toggle individual policies on or off using the Enable / Disable switch without deleting the configuration. This is useful for temporarily falling back to standard DNS during an incident.17. Zone Mirrors
Available on Agency. Zone mirroring replicates a zone’s records to one or more additional DNS providers in real time. Every record create, update, or delete on the primary zone is dispatched as a background job to each mirror target. This allows you to maintain redundant DNS across providers.Adding a mirror
- On the zone detail page, click Mirrors → Add mirror.
- Select the target server (a different provider from the zone’s primary server).
- Click Save.
Mirror status badges
Manual resync
Click Resync on a mirror to force a full re-synchronisation from the primary zone. Use this after resolving an error condition.Limits
Check your plan for themirror_limit. Free, Starter, and Pro plans do not include zone mirroring.
18. Outbound Webhooks
Go to/webhooks to set up HMAC-signed HTTP callbacks when DNS events occur.
Creating a webhook endpoint
- Click New webhook.
- Enter the URL of your endpoint.
- Select the events you want to subscribe to (listed below). Leave all of them unticked to subscribe to every event.
- Click Save. PanelDNS generates a secret key for this endpoint.
Verifying payloads
Each webhook delivery includes anX-PanelDNS-Signature header containing an HMAC-SHA256 signature of the request body, signed with your endpoint’s secret key. Verify this signature in your endpoint handler before processing the payload.
Example (PHP):
Delivery log and retries
Click on a webhook endpoint to view its delivery log — a timestamped list of every delivery attempt with the HTTP response code and body. Failed deliveries are retried automatically with exponential backoff.19. Notification Channels
Notification Channels deliver real-time alerts to your team’s chat and messaging tools (Slack, Microsoft Teams, Discord, Telegram, or WhatsApp) when DNS events occur in your account. Unlike Outbound Webhooks — which send signed HTTP payloads to a custom endpoint for programmatic processing — Notification Channels send human-readable messages directly to chat platforms so your team sees alerts without writing any integration code. Go to/notification-channels to manage your channels.
Supported channels
Slack
Microsoft Teams
Discord
Telegram
Creating a channel
Add a channel
Choose the channel type
Enter the credentials
Add a label (optional)
Choose events
Save
Setting up a channel
- Slack
- Microsoft Teams
- Discord
- Telegram
- WhatsApp (Meta Cloud API)
- WhatsApp (Twilio)
- Create an Incoming Webhook at api.slack.com/apps → your app → Incoming Webhooks → Add New Webhook to Workspace, and choose the channel you want alerts posted to.
- Copy the Webhook URL (starts with
https://hooks.slack.com/services/…). - In PanelDNS, click + Add Channel, choose Slack, and paste the URL into Webhook URL.
- Select the events to subscribe to and click Create Channel.
- Click Test on the channel row to verify a message arrives in the Slack channel.
Events
Leave every event unticked to receive all of them — including any added in future releases. Tick only the ones you want to narrow it down.Zone events
Zone events
Record events
Record events
Failover events
Failover events
Sub-client events
Sub-client events
Expiry events
Expiry events
Plan limit events
Plan limit events
Testing a channel
After saving, click Test on the channel row. PanelDNS sends a test message immediately and shows success or a detailed error. Use this to confirm credentials before relying on alerts in production.Managing channels
Editing — click Edit on the channel row to update the label, credentials, or subscribed events. Leave a token field blank to keep the existing secret. Changes take effect immediately. Pausing — untick Enabled in the edit form to pause delivery without deleting the channel. A paused channel shows a grey Disabled badge. Events that occur while a channel is paused are not replayed when you re-enable it. Deleting — click Delete on the channel row and confirm. Deletion is permanent and removes the channel’s delivery history. Delivery counters — each row shows how many deliveries succeeded (✓) and failed (✗) and when the channel last sent. A failed send is retried automatically (up to three attempts in total, with growing delays) before it counts as failed. Notification channels keep counters rather than a per-attempt log; use Outbound Webhooks if you need a delivery log.Differences from outbound webhooks
Plan limits
Notification channels are not counted against your plan’s webhook allowance, and PanelDNS does not enforce a separate plan limit on how many channels you create. Only your outbound webhooks count towards the Webhooks limit in Plans and Limits.20. REST API and API Tokens
The REST API lets you integrate PanelDNS with your own systems — billing platforms, provisioning scripts, client portals, and automation workflows.Creating an API token
Go to/api-tokens:
- Click New token.
- Enter a label (e.g. “Provisioning script”).
-
Select the scopes you need:
- Click Create. Copy the token immediately — it is shown only once. Tokens are stored as SHA-256 hashes; the raw value cannot be recovered.
IP allowlist
When creating a token, you can optionally restrict it to specific IP addresses. Enter a comma-separated list of CIDRs in the Allowed IPs field (e.g.203.0.113.10/32, 198.51.100.0/24). When set, requests from any other source IP return 403 Forbidden — even if the token is otherwise valid.
Leave Allowed IPs blank to allow requests from any IP address (the default).
Use IP allowlists for long-lived provisioning tokens where the calling server has a known static IP. For tokens used in dynamic environments (CI pipelines, developer machines), leave the field blank and rotate the token regularly instead.
API base URL
Authentication
Pass the token in theAuthorization header:
Key endpoints
/api/docs once you are signed in. The
raw specification at /api/docs.json needs no sign-in, so code generators can fetch
it directly.
Response format
AI / MCP access (manage DNS from Claude)
PanelDNS hosts a Model Context Protocol (MCP) server at/mcp/reseller. MCP lets an AI assistant such as Claude (Claude Desktop, or any MCP-compatible client) connect directly to your account so you can read and manage DNS in plain language — for example, “list my zones”, “add an A record for api.example.com pointing to 1.2.3.4”, or “delete the old TXT record from acme.com”.
This is a reseller-tier feature. It uses the API tokens you already manage at Settings → API Tokens — there is no separate credential to create.
Create or reuse an API token
/api-tokens and create a token with the scopes you need. For read-only access use zones:read + records:read. For full read/write use all four scopes.Add the MCP server to your client
/mcp/reseller on your PanelDNS instance and authenticate with that token (Authorization: Bearer dnsm_<your-token>).Manage your DNS through the agent
ACME / DNS-01 Certificate Automation
PanelDNS provides three external integration packages for automating TLS certificate issuance via DNS-01 challenges (v3.56.0). These allow your infrastructure or your sub-clients’ infrastructure to automatically obtain Let’s Encrypt (or any ACME CA) certificates without manual DNS management.Available integrations
acme.sh hook
lego provider
cert-manager webhook
Setup
Create an API token
records:write scope.Note your zone IDs
Configure the integration
Run a dry-run
21. Marketplace and Zone Templates
Browsing and applying templates
The marketplace at/marketplace contains public zone templates — pre-built sets of DNS records for common scenarios (e-commerce platforms, email providers, CDN configurations, etc.).
No login is required to browse. To apply a template:
- Find a template and click Apply to zone.
- Select the zone from your account.
- Review the records that will be created.
- Click Apply.
Creating your own templates
On Pro and above, you can create private zone templates at Settings → Zone Templates (or from the zone detail page via Save as template).- Enter a title, description, and tags.
- Define the records to include. Use the
{zone}placeholder in record names — it is replaced with the actual zone name when the template is applied (e.g.mail.{zone}becomesmail.example.com). - Click Save.
Publishing to the public marketplace
On Pro and above, you can publish a template so any PanelDNS user can apply it:- Open the template and click Submit for review.
- The template enters an approval queue. The platform administrator reviews it and either approves (making it public) or rejects it with a reason.
Curating the marketplace for sub-clients
You can control which public marketplace templates your sub-clients can see and use:- Go to Marketplace → Manage for clients.
- Toggle individual templates on or off for your sub-clients.
22. Billing and Invoicing Sub-Clients
Your PanelDNS subscription
Your own PanelDNS subscription is managed at/billing. Current plan, usage meters, upgrade/downgrade, and invoice downloads are all available here.
Usage meters show your real-time consumption against plan limits (zones, sub-clients, seats, API calls, monitors). Overages on zones, clients, and seats are reported to Stripe daily.
Annual Billing
If your PanelDNS plan is billed annually, your subscription renews once per year at the discounted annual rate. Impact on sub-clients: Your sub-clients are billed according to your own billing configuration (monthly or annually as you set up for them). The platform’s annual billing cadence for your reseller account is independent of how you bill your own customers. Proration: Mid-cycle upgrades are prorated to the next renewal date. Downgrades take effect at renewal.Accepting payments from sub-clients (Stripe Connect)
Connect your Stripe account to charge sub-clients directly — payments go to your Stripe account, not to PanelDNS.- Go to Settings → Billing → Connect Stripe.
- Complete the Stripe OAuth flow. You are redirected to Stripe to authorise the connection, then back to PanelDNS.
- Once connected, your invoices have a Pay online option that opens Stripe Checkout for the sub-client.
Creating invoices for sub-clients
Go to/invoices → New invoice.
- Select the sub-client.
- Add line items: description, quantity, and unit price.
- Apply tax percentage if required. The total is calculated automatically.
- Optionally enter a coupon code (see Coupon codes below). The discount is calculated and previewed live in the totals summary.
- Set the due date.
- Click Save as draft or Send now.
draft to sent.
Invoice statuses:
Coupon codes
Create named coupon codes for promotional pricing — for example, a new-client discount, a loyalty reward, or a service bundle deal.Creating a coupon
Go to Dashboard → Coupons → New coupon (requires a plan with billing enabled).Applying a coupon to an invoice
When creating or editing a draft invoice, type the coupon code into the Coupon code field and click Apply. The dashboard validates the code immediately and, if valid, shows:- A confirmation label (e.g.
10% off — WELCOME20) - A live discount preview in the totals breakdown below the line items
The coupon field is only shown on the invoice form when your org has at least one active coupon. If you don’t see it, go to Dashboard → Coupons and create one first.
Coupon usage tracking
Each coupon tracks how many times it has been claimed:used_countis incremented the first time you send an invoice with that coupon. Re-sending the same invoice does not increment the count again.- If you void a sent invoice, the usage slot is returned (decremented). Voiding a draft invoice — which was never sent — does not affect the count.
- Once
used_countreachesmax_uses, the code is rejected on new invoices. The existing invoices that already carry the coupon are unaffected.
Deleting a coupon
A coupon that is attached to one or more active (non-void) invoices cannot be deleted — the dashboard shows how many invoices are affected. To stop accepting new redemptions without disturbing existing invoices, toggle Active off instead.23. Settings Reference
Go to/settings for all account and organisation settings. The page is organised into
tabs: Profile, Password, Security, Branding, Nameservers, Email, and
Advanced (analytics, legal documents, portal language, marketing preferences, and the danger
zone). You can deep-link to a tab with ?tab= — e.g. /settings?tab=security.
Profile
Update your display name and email address. Your email is used for login and system notifications. Changing your email address requires re-verification — a verification link is sent to the new address and your account is locked to the old email until confirmed.Password
Change your account password. You must enter your current password to set a new one.Security — Passkeys
Register a WebAuthn passkey (hardware security key or device biometrics) for passwordless login. You can register multiple passkeys. Remove any passkey from this page.Security — Authenticator app (2FA)
Enable two-factor authentication using an authenticator app (Google Authenticator, Authy, 1Password, etc.) from Settings → Security:- Click Enable 2FA.
- Scan the QR code with your authenticator app (or enter the manual key shown).
- Enter the current 6-digit code and click Confirm.
- Save your recovery codes. Once 2FA is enabled, the card shows eight single-use recovery codes — store them somewhere safe (a password manager is ideal). Each one works once if you lose your authenticator device. You can Regenerate recovery codes later (which invalidates the old set).
SSO (OIDC)
Configure an OIDC identity provider for your team’s login. Fields required:- Issuer URL — PanelDNS auto-discovers the provider’s endpoints from
{issuer}/.well-known/openid-configuration. Click Test discovery to verify. - Client ID and Client secret — obtained from your identity provider’s application settings.
- Scopes — typically
openid email profile. - Auto-provision — when enabled, PanelDNS creates a new account on first SSO login for users not yet in your org.
Email driver
Configure how PanelDNS sends transactional emails on your behalf (zone alerts, sub-client invitations, invoice emails):Currency
Set the display currency for invoices. This is a display setting — Stripe handles actual currency conversion based on your Stripe account settings.Portal & Team Options
Control portal-level and team behaviours:- Allow or prevent sub-clients from viewing propagation check results.
- Enable or disable the marketplace for sub-clients.
- Set whether sub-clients can export zone files.
- Allow sub-clients to schedule record changes (
subclient_can_schedule— requires Pro+ plan with change scheduling enabled). - Require approval for editor record changes — when enabled, changes made by team members with the Editor role are held in a pending queue for owner or admin review before being applied (requires Starter plan or above).
Sub-client Support
Set a support email address that your sub-clients can use to reach you. When configured, a Contact support button appears in the footer of every sub-client’s portal sidebar. Clicking it opens amailto: link addressed to this email.
Path: /settings → scroll to Sub-client Support card
This is intentionally low-friction — no ticket system integration required. Use any email address you actively monitor: a shared helpdesk inbox, a personal address, or an alias that forwards to your support system.
Platform-level docs and support links (shown to you as the reseller in your own dashboard) are configured by the platform operator in their admin panel, not in your settings.
Marketing Preferences
Open Settings → Advanced and scroll to the Marketing preferences card. This controls whether PanelDNS may send you marketing and lifecycle emails — product updates and announcements, tips, onboarding guidance, feature highlights, promotional offers, and newsletters. Transactional emails (invoices, zone alerts, password reset, security notices) are always sent regardless of this setting. Opt-in at registration: The registration form includes an optional checkbox (“I’d like to receive product updates, tips, and occasional news by email.”). It is not pre-checked. If you checked it when signing up, your opt-in is recorded with a timestamp. If you did not, you will not receive marketing emails until you opt in here. To change your preference at any time, tick or untick Receive product updates, tips, and lifecycle emails from PanelDNS. The change saves as soon as you toggle the checkbox. Unticking it records your opt-out (marketing_opted_out_at) and unsubscribes you; ticking it again re-subscribes you.
You can also opt out via the Unsubscribe link in the footer of any marketing email
(no login required). The unsubscribe link is a tokenised URL (/unsubscribe/{token})
that works independently of your account status — you can opt out even after requesting
account closure.
Cookie Preferences
PanelDNS uses a cookie preference centre. A Cookie preferences item is available in the user menu (as well as the sidebar footer) so you can re-open the consent centre at any time — including after you have already accepted or dismissed the initial cookie banner — to change your choices.localStorage under ck_prefs on your current device and browser. It is not
synced across devices.
If the platform operator has configured Google Analytics, it loads only when you have given
analytics consent. Cookieless providers (Plausible, Fathom) are not gated on consent and
do not appear in the preference centre.
24. Frequently Asked Questions
Can sub-clients see other sub-clients’ zones? No. The sub-client portal enforces strict ownership isolation. A sub-client can only see and manage zones that are explicitly assigned to their account. Zone IDs submitted from the portal are always verified against the sub-client’s assignment before any action is taken. What happens if I exceed my plan’s zone limit? Zone creation is blocked once you reach the limit. Overages on zones, clients, and seats are reported to Stripe and charged at metered rates. Upgrade your plan at/billing to increase your limits.
Can I use multiple DNS providers at the same time?
Yes. Different zones can be hosted on different providers. You might use Cloudflare for high-traffic zones and a cPanel server for shared hosting zones. Each zone is associated with one primary server, but you can add mirrors to replicate a zone to additional providers.
How do I transfer a zone from one sub-client to another?
From the zone detail page, use the Transfer zone action (available to admins and owners). Select the destination sub-client. The zone’s sub_client_id is updated and any package association is cleared. The zone records remain unchanged on the DNS provider.
Do sub-clients know they are using PanelDNS?
Not if you configure your branding correctly. Set your brand name, logo, and brand colour in Settings → Branding, and use a custom portal domain. With these in place, sub-clients interact with a portal that carries your branding exclusively. PanelDNS is not mentioned.
What DNS record types are supported?
All standard types across all providers: A, AAAA, CNAME, MX, TXT, NS, SOA, SRV, CAA, PTR, NAPTR, and others where the provider supports them. Provider-specific limitations apply — for example, Namecheap does not support SRV, CAA, NS, or PTR records. Check the provider’s documentation for its specific constraints.
How do I give a client view-only access to their DNS records without letting them make changes?
Do not invite the sub-client to the portal. Instead, use the Zone Audit report or export the zone as a BIND file and share it with them manually. If you want them to have read-only portal access, PanelDNS’s sub-client portal does not currently offer a viewer-only sub-client role — all sub-client portal users can make changes to their assigned zones.
What happens to a zone when I suspend a sub-client’s account?
Suspending individual zones (via the Suspend action on the zone) sets the zone’s status to suspended and prevents sub-client access. Deleting a sub-client from /clients does not automatically suspend or delete their zones — you need to take zone-level action separately.
Can I automate zone provisioning when a new hosting account is created?
Yes. Use the REST API (POST /api/v1/zones) to create zones programmatically. Combine this with webhooks from your billing or provisioning system. A typical flow: new hosting order → your provisioning script calls PanelDNS API to create the zone and assign it to the sub-client → sub-client is invited to the portal automatically.
How long are backups and snapshots retained?
Retention depends on your plan: 7 days (Free), 30 days (Starter), 90 days (Pro), 365 days (Agency). Auto-backups run nightly. Snapshots are created on every record change. You can restore any snapshot within the retention window from the zone’s History card.
Where do I find the PanelDNS API documentation?
Full OpenAPI documentation is available at /api/docs on your platform instance once
you are signed in. It includes every endpoint, request and response schema, and the
authentication details.
The raw specification at /api/docs.json is available without signing in, which is
what you want when pointing a code generator at it.
25. Status Page
Your PanelDNS plan includes a white-label public status page — a dedicated page your sub-clients can visit to see the live health of your DNS services. It reflects your monitors, components and incidents in real time, and carries your brand name, logo and colour.Enabling Your Status Page
- Go to Dashboard → Status Page → Settings
- Toggle Enable public status page on
- Optionally set a custom Page title and Description
- Click Save Settings
https://{your-portal-domain}/status— if you have a custom portal domainhttps://{your-slug}.paneldns.com/status— if using the default subdomain
What Sub-Clients See
The page shows:- Overall status banner — All Systems Operational / Degraded / Partial Outage / Major Outage
- Component list — one row per monitor you have configured, with green/red status
- Active incidents — any incidents you have opened with their latest update
- Past incidents — last 5 resolved incidents
If the Page Stops Updating
Your status page is refreshed from PanelDNS every few minutes. If those updates stop — maintenance, a network problem, anything — the page does not keep showing the last green result, because a page confidently reporting “all systems operational” throughout a disruption is worse than no page at all. After 15 minutes without an update, the page changes:- Incidents you have already posted stay visible and stay accurate. Only the automatic “everything is fine” claim is withdrawn, because that is the one thing that cannot be verified while updates are stopped.
- The wording is in your portal language and names no supplier. Your customers see a neutral message about your monitoring; nothing identifies PanelDNS or any provider behind your service. Set your language under Dashboard → Settings → Portal Language.
Managing Incidents
When a service disruption occurs:- Go to Dashboard → Status Page → Incidents → New Incident
- Set a title, impact level (None / Minor / Major / Critical), and initial message
- Set the status to Investigating
- Click Create Incident — it appears on your public status page immediately
- Change status to Identified when you know the cause
- Change to Monitoring once a fix is deployed
- Change to Resolved to close the incident — it moves to Past Incidents
Email Subscriptions
Visitors to your status page can subscribe for email updates using the Subscribe form at the bottom of the page. Subscriptions use double opt-in — the visitor receives a confirmation link and is only added once they click it (so nobody can sign someone else up). When you open a new incident (any status other than Resolved), every confirmed subscriber is emailed automatically — sent through your configured mail driver, branded as your organisation, with a one-click Unsubscribe link in every message. Incidents created already-resolved do not send notifications.Custom Status Domain (Starter plan and above)
Instead ofyourportal.com/status, you can host your status page at a dedicated subdomain like status.yourportal.com:
- Go to Dashboard → Status Page → Settings → Custom Status Domain
- Enter your desired hostname (e.g.
status.yourdomain.com) - Add a CNAME record in your DNS:
- Click Save Custom Domain — TLS is provisioned automatically within a few minutes
Custom Components
Instead of the default view (which shows your DNS failover monitors), you can define your own named components that appear on your public status page:- Go to Dashboard → Status Page → Components → Add Component
- Enter a name (e.g. “DNS”, “Email Routing”, “API”, “Web Hosting”)
- Set the initial status (Operational by default)
- Click Add Component
- Go to Dashboard → Status Page → Components
- Change the dropdown next to the component to the appropriate status
- The change appears on your public status page within 5 minutes
Emergency Incident Posting (No Dashboard Required)
If the PanelDNS platform is under maintenance and you cannot access your dashboard, you can still post incidents directly to your status page using your Emergency API Key. Generate your API key: The Status API Key card is at the bottom of Dashboard → Status Page → Settings.- Click Generate Key (or Regenerate Key to rotate an existing one)
- Copy the raw key immediately using the Copy button — it is only shown once. The stored value is a SHA-256 hash; if you lose the key, regenerate it.
- Your key is active immediately — it is pushed to Cloudflare’s edge in real time
impact = none/minor/major/critical; status = investigating/identified/monitoring/resolved
Emergency form (no API client needed):
Visit https://your-portal-domain.com/status/post in any browser, enter your API key, fill in the form, and click Post Incident. This page is served from Cloudflare’s edge — it works even when the platform is down.
Update an existing incident:
POST the same title to update the existing active incident with a new status and message. POST with "status": "resolved" to close it and move it to Past Incidents.
Status Page and Plan Limits
26. Web Analytics
Track how your customers use your dashboard and their sub-client portal in your own analytics account. Go to Settings → Web Analytics and choose a provider:G-XXXXXXX, Plausible domain, Fathom site ID, or
PostHog key) and save. Your tag fires on your reseller dashboard and your sub-clients’
portal — you only see traffic for your own org, not other resellers.
src-only <script> tag — the URL it points to must be https://, and the tag must have no inline JavaScript between its opening and closing tags. This runs the same tag on every one of your sub-clients’ portal pages, so inline JS is no longer accepted for security reasons (a reseller-supplied inline script would otherwise execute in your sub-clients’ browser sessions). If you previously used an inline snippet here, switch to that provider’s hosted script-tag embed instead — most analytics providers (Matomo, Umami, Clarity, etc.) offer one.27. Portal Language
You can set the language your sub-client portal and customer-facing emails (invitations, password resets) are displayed in. Go to Settings → Portal Language, choose a language, and click Save Language. Currently available: English, Español (Spanish), Français (French), Deutsch (German), Português (Portuguese), 简体中文 (Simplified Chinese), and 繁體中文 (Traditional Chinese). Notes:- The setting is the org-wide default for all of your sub-clients.
- Individual sub-clients can override it — each can pick their own language in their portal under Settings → Language (“Account default” keeps your org default). Their invitation and password-reset emails follow their personal choice too.
- Your own reseller dashboard and the platform admin panel remain in English.
- More languages are added over time; if your language isn’t listed yet, let the platform operator know.
28. Domain Reputation & Zone Suspension Notices
v3.45.0 — P1 + P2 + P5 live. Zone-creation blocking, automatic suspension, and GDPR Art. 22 safeguards (decision records, appeal form with SLA, audit trail) are all deployed. Monitor mode is on by default — the platform operator must explicitly disable it before zones are suspended. When monitor mode is off, the behaviour below applies.PanelDNS checks every new zone against external threat-intelligence databases. If a domain scores above a threshold, the platform may automatically suspend the zone or flag it for staff review. This protects the platform’s nameserver IPs — a phishing campaign on shared nameservers can cause providers to blocklist the entire IP, affecting every customer.
What you (or your sub-clients) might receive
If a zone is suspended (or restricted) by the reputation system, the zone owner receives an email explaining:- What happened (the action taken, the reputation score against the threshold, and the threat categories)
- That no personal data was processed — only the domain name was checked
- Their GDPR Article 22 rights: the right to contest and request human review
- A direct link to appeal the decision, and the response deadline (typically 72 hours)
How to appeal
Open the zone
Click Appeal
Add context (optional)
Submit and await response
If rejected: the zone stays suspended. The rejection email includes the reviewer’s notes. Contact the platform operator if you believe the outcome is incorrect.
What counts as a false positive?
Common legitimate reasons a domain may be flagged:Can I see reputation data for my sub-clients’ zones?
Not beyond the notices described above. The suspension email and the banner on the zone’s detail page are the only places you see a decision; the full reputation records are surfaced in the platform’s admin panel only, and sub-clients do not see reputation scores or records in their portal. What a sub-client does see is a red notice on the suspended zone’s page saying the zone was suspended automatically by a domain-reputation check, that you have been notified, and that you can ask for the decision to be reviewed on their behalf. If a sub-client reports a suspension, use the appeal flow above.29. Legal Compliance — Sub-client Consent Setup
Why this matters
When a sub-client follows their invitation link to set a password, they must explicitly agree to your legal documents before they can access the portal. Under GDPR Article 7, consent must be freely given, specific, informed, and unambiguous. Under Article 13, you must provide certain information about how their data is processed at the time it is collected — which is that moment. PanelDNS builds the consent gate into the invite flow. What it cannot do is supply your legal documents — those must be your own, covering how you (the reseller) process your sub-clients’ personal data.Setting your portal legal URLs
Go to Settings → Sub-client Portal Legal.- Portal Terms of Service URL — enter the publicly accessible HTTPS URL of your sub-client terms. This must be your own terms, not PanelDNS’s. Example:
https://acmedns.com/terms - Portal Privacy Policy URL — enter the URL of your privacy notice. Same rule applies. Example:
https://acmedns.com/privacy - Policy version — enter a string that identifies the current version of your terms. You control the format:
2026-06-07andv1.2are both fine. When you update your terms, bump this string to signal sub-clients that re-consent is needed (see Bumping your terms version below). - Click Save.
What sub-clients see
When a sub-client follows their invitation link to set a password, the form includes:- Links to your Terms of Service and Privacy Policy (the URLs you entered above).
- A mandatory checkbox: I agree to the Terms of Service and Privacy Policy. The sub-client cannot set their password without checking it.
- A notice that their domain names are checked against third-party threat intelligence services as part of the platform’s security. This is disclosed in the platform’s Data Processing Agreement and is surfaced in the consent notice so sub-clients are aware of it before they submit any data.
Consent records
PanelDNS records the following for every sub-client consent event:- The sub-client’s account ID (
actor_id), the document URLs they accepted, and the version string they accepted. - Their IP address and user-agent at the time of consent.
/consent/export.csv while you are signed in (there is no button for it in Settings; the re-acceptance page links to it). Keep this file for your GDPR records; it is the evidence you would produce to a supervisory authority if asked to demonstrate consent.
Bumping your terms version
If you update your terms:- Publish the updated document at the URL you have already configured (or publish new URLs and update the fields).
- Go to Settings → Advanced → Sub-client Portal Legal → Policy version and enter the new version string.
- Click Save.
- If you leave Policy version empty, sub-clients are never asked to accept anything.
- When you view the portal as a sub-client (see Logging in as a sub-client), you are never asked to accept the terms, and you cannot accept on their behalf.
What you accepted when you signed up
When you registered your reseller account, you accepted PanelDNS’s own Terms of Service, Privacy Policy, and Data Processing Agreement. The DPA covers PanelDNS acting as a data processor for the personal data of your sub-clients. Permanent archive links for the version you accepted are at/legal/archive/2026-06-07/terms and equivalent paths for the other documents.
If the platform legal documents are updated, what you see depends on how significant the change is:
- Minor changes — a dismissible orange banner appears in your dashboard: “Our legal documents have been updated — please review and accept.” Click through to read and confirm. You can keep working without immediately accepting.
- Material changes — a blocking re-acceptance interstitial at
/consent/reacceptis shown on your next login. You cannot access the dashboard until you accept. However, you can still export your data, close your account, or log out before accepting — you are never fully locked out of your own data.
WHMCS-provisioned accounts
If your reseller account was created automatically by a WHMCS hosting provider — rather than by you registering directly — the WHMCS module records your acceptance of platform terms on your behalf as part of the API provisioning flow. On your first login after automated provisioning, you will see a one-time Action required banner. Click through to review the Terms of Service, Privacy Policy, and DPA and accept them directly. Until you do, certain features (including sending sub-client invitations) remain locked.Re-acceptance: what changed and why
When the platform operator issues a material document change that requires your re-acceptance, the blocking interstitial now shows which version you previously accepted and which version is new — e.g. “Documents updated from version 2026-01-01 to 2026-07-01”. This makes it easy to check the archive links for the diff before clicking Accept. Archive links for every version are permanent and immutable at/legal/archive/{version}/{document}.
Sub-processor change notices (DPA §7)
PanelDNS may use sub-processors (third-party services) to help deliver the platform. When a sub-processor is added or removed, you will receive:- An in-app notice in your dashboard notification bar.
- An email sent to your account’s primary email address.
In-app legal notice banners
When the platform operator publishes new legal documents, you may see an in-app notice banner in your dashboard — before or instead of the consent wall:When the platform admin updates the legal version
The platform operator can update the legal document version at any time from their admin panel — no code release is required on your end. When they do:- You will see either a dismissible banner (minor change) or the blocking re-acceptance interstitial (material change) on your next login to the reseller dashboard.
- The same prompt appears for every reseller on the platform — it is not targeted at you specifically.
- If you manage sub-clients, their own re-consent prompts (governed by your portal terms version, not the platform version) are unaffected by this change.
Sub-client anonymisation on deletion
When you delete a sub-client from the Sub-clients page, their personal data (name, email, password hash) is anonymised inside a database transaction before the account is removed. Consent records are retained for audit purposes but are no longer linked to identifiable information. This satisfies GDPR Article 17 (right to erasure) while preserving your audit trail. DNS zones previously assigned to the sub-client are not deleted — they remain under your org with no sub-client assignment.30. Account Closure & Data Rights
Closing your reseller account
Only the account owner can close the account. Go to Settings → Close Account (/settings/close-account), enter your password and type your organisation name to confirm.
The closure process works as follows:
- You submit a closure request. A confirmation email is sent, and you stay signed in.
- A 90-day cooling-off period begins. Your account keeps working normally, and the Close Account page shows the date the closure will happen, with a Cancel the closure button. Nothing is deleted until then.
- Seven days before that date, the account owner receives a reminder email.
- On the closure date, the closure is processed automatically:
- Your Stripe subscription is cancelled. It keeps billing during the 90 days — cancel it sooner from Billing → Manage if you prefer.
- All zones are deleted, then removed from the DNS provider 7 days later. Move your nameservers elsewhere before the closure date if your domains need to keep resolving.
- Sub-client accounts are anonymised and locked.
- Personal data (names, email addresses, passwords) is anonymised, and API tokens, passkeys and saved sign-ins stop working.
- Team members who also belong to another organisation are removed from yours but keep their own account.
- Your organisation is marked as
cancelled.
Submitting a GDPR data rights request
For formal data subject rights requests (access, erasure, rectification, portability, or objection), use the Privacy Request Form at/privacy-request. This form is publicly
accessible — no login is required.
Request types:
31. Backups & Zone History
Accessing zone history
Every time records change in a zone, PanelDNS takes a snapshot. To view the history for a zone:Open Zones
Open the zone
Find the History card
Point-in-time restore
To restore a zone to a previous state:Pick a snapshot
Review the diff
Restore
Nightly backups
PanelDNS takes a nightly backup of all zone data. From v3.46.0, these backups are stored on the configured S3 storage (see your platform operator for storage details) in addition to local disk, for off-VPS redundancy. Downloading a backup:Open Backups
Find the backup
Download
.json.gz file directly to your browser.{date}.json.gz. The download is streamed server-side; filenames are validated to prevent path traversal.
What is included: all zones and DNS records for your org at the time of the backup.
Team members, billing data, and sub-client accounts are not included — those are managed by
the platform operator.
Sub-client zone history
Sub-clients can view the change history for their zones in the portal zone page. The diff view is the same as the reseller dashboard (trigger badge, +/- change counts, expandable diff). Sub-clients cannot restore a previous version. Direct them to contact you if they need a rollback — you can restore from the reseller dashboard on their behalf.For operator-level documentation (server setup, Docker deployment, Cloudflare for SaaS, PowerDNS cluster), see the other files in this
docs/ directory.