canonical: https://jentic.com/apis/luadns.com/luadns

# LuaDNS API

LuaDNS is a managed authoritative DNS provider whose REST API exposes the operations needed to run zones programmatically - zone CRUD, record CRUD, DS record listing for DNSSEC delegation, and a user-settings endpoint. The 12 endpoints cover the full domain-zone lifecycle with HTTP Basic authentication, so any tool that can sign a Basic header can manage zones and records. Zones are scoped to the authenticated user.

## For AI agents

Manage DNS zones and records on LuaDNS - list and CRUD zones, list and CRUD records, list DS records for DNSSEC delegation - across 12 endpoints with HTTP Basic auth.

## Scope

Does not handle domain registration, CDN, WAF, or HTTP traffic management - use for LuaDNS authoritative zone and record operations only.

## Capabilities

- Create, retrieve, update, and delete DNS zones owned by the authenticated user
- Create, retrieve, update, and delete records (A, AAAA, MX, TXT, CNAME, etc.) on a zone
- List the DS records configured on a zone for DNSSEC delegation to a registrar
- Retrieve the authenticated user's account settings and quota information
- Bulk-edit records on a zone by iterating create-update-delete calls within a single workflow

## Use cases

### Infrastructure-as-code DNS management

Platform teams check zones and records into a Git repo and reconcile against LuaDNS via API on every deploy. The 12 endpoints are enough to drive a Terraform-style reconciliation loop - diff intended vs actual records, then create, update, or delete to converge. HTTP Basic auth keeps the integration trivial in CI.

Example prompt: GET `/zones/{id}/records`, diff against the desired set in the repo, and POST, PUT, or DELETE records on the zone to converge.

### Automated SSL certificate provisioning

ACME-based certificate issuance (Let's Encrypt, ZeroSSL) needs DNS-01 challenges, which means temporary TXT records on a zone. LuaDNS's record CRUD endpoints support this flow - the certbot helper creates the TXT, validation runs, then the helper deletes it. Because the surface is small, integrating LuaDNS with an ACME client takes under an hour.

Example prompt: POST `/zones/{zone_id}/records` to create the _acme-challenge TXT record, wait for validation, then DELETE the record by ID.

### Failover and traffic-shaping automation

Operations teams use the API to flip A or CNAME records to a backup endpoint when monitoring detects an outage. Because LuaDNS exposes record-update directly, the runbook is a one-call change with low TTL pre-configured for fast propagation. The DS record endpoint supports DNSSEC parity with the registrar after every change.

Example prompt: On a health-check failure, PUT `/zones/{zone_id}/records/{id}` with the backup IP for the affected A record, then verify by GET `/zones/{zone_id}/records.`

### Agent-driven DNS assistant via Jentic

An AI agent embedded in an SRE chatops bot lets engineers say 'add a TXT record for verification on example.com' and have it applied. The agent calls LuaDNS through Jentic, which holds the Basic-auth credentials in its vault so the engineer never pastes them into chat. The 12-endpoint surface fits comfortably in one tool listing.

Example prompt: Use Jentic to search 'create luadns record', load POST `/zones/{zone_id}/records`, and execute it with the parsed zone, record type, name, and value from the chat message.

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| GET | `/zones` | List all zones |
| POST | `/zones` | Create a new zone |
| GET | `/zones/{id}` | Get a zone |
| PUT | `/zones/{id}` | Update a zone |
| DELETE | `/zones/{id}` | Delete a zone |
| GET | `/zones/{zone_id}/records` | List records on a zone |
| POST | `/zones/{zone_id}/records` | Create a record on a zone |
| GET | `/zones/{zone_id}/ds_records` | List DS records for DNSSEC delegation |

## Key resources

- **Zones** — Create, retrieve, update, and delete DNS zones owned by the authenticated user
- **Records** — Manage A, AAAA, MX, TXT, CNAME, and other record types on a zone
- **DS Records** — List DNSSEC delegation records for a zone
- **Users** — Retrieve account settings for the authenticated user

## Why Jentic

- **Setup:** Wiring the LuaDNS API by hand means setting up HTTP Basic auth with your email and API token, building the Authorization header on every call against api.luadns.com, and shaping zone and record request bodies yourself. Through Jentic you install once, import LuaDNS from the API Directory, store the Basic credentials once, and your agent calls it.
- **Permission scoping:** LuaDNS puts the zone id in the URL path (`/zones/{zone_id}/records`), so a rule can pin your agent to one zone: it can read and add records for that zone and nothing else. You choose the operations it may call, so destructive ones like deleting a zone are not included unless you add them.
- **Credential handling:** Your LuaDNS email and API token are stored once, encrypted, by your own Jentic One instance and used to build the Basic Authorization header at execution time. They never enter the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'create a LuaDNS record' or 'list zones', and Jentic returns the matching LuaDNS operation with its input schema so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **Cloudflare API** — Managed DNS provider with broader CDN, WAF, and Workers surface
- **DigitalOcean API** — Cloud-platform API that includes a DNS sub-resource alongside compute and storage
- **Google Cloud DNS API** — Google Cloud's authoritative DNS service with project-scoped zone and record management
- **AWS API** — Cloud platform that hosts the workloads pointed to by LuaDNS records

## FAQ

### What authentication does the LuaDNS API use?

LuaDNS uses HTTP Basic authentication - the email and API token combination from the LuaDNS account dashboard are sent in the Authorization header. Through Jentic, the credentials live in the vault and Jentic constructs the Basic header at execution time, so the agent never holds the raw token.

### Can I create DNS records through the LuaDNS API?

Yes. POST `/zones/{zone_id}/records` creates a record of any supported type (A, AAAA, MX, TXT, CNAME, etc.) on the named zone. Use Jentic search 'create luadns record' to load the operation and supply zone ID, record type, name, content, and TTL.

### What are the rate limits for the LuaDNS API?

LuaDNS applies fair-use rate limiting per account and returns HTTP 429 when exceeded. Because most automation flows are bursty (deploy time) rather than sustained, the limit is rarely hit; Jentic surfaces 429 responses unchanged so the agent retries with backoff.

### How do I retrieve DS records for DNSSEC delegation through Jentic?

Search Jentic for 'list luadns ds records', load GET `/zones/{zone_id}/ds_records`, and execute it with the zone ID. The response contains the DS records you copy into the registrar to complete DNSSEC delegation.

### Does the LuaDNS API support bulk record imports?

There is no single bulk-import endpoint - instead, iterate POST `/zones/{zone_id}/records` for each record in the desired set. Most automation tools wrap this in a small loop and use the list endpoint to confirm convergence.

### How many endpoints does the LuaDNS API expose?

12 endpoints across zones, records, DS records, and user settings. The full surface fits in a single Jentic operation search and is small enough for an agent to hold in context for a chatops-style DNS workflow.

### Can I limit what my agent is allowed to do with the LuaDNS API?

Yes. Because Jentic One is self-hosted, your own rules decide which LuaDNS operations and credentials your agent may use, and since LuaDNS puts the zone id in the URL path (`/zones/{zone_id}/records`) you can pin an agent to a single zone so it only reads and adds records there. You choose the exact operations it can call, so destructive ones like DELETE `/zones/{id}` are excluded unless you explicitly grant them. Your LuaDNS email and API token stay stored on your own instance and are never placed in the agent's prompt or context.
