Skip to content

DNS

Managed DNS zones and records with domain-ownership verification across Cloudflare / Route53 / AliDNS. (Not domain registration.)

1. Overview

Base path: https://api.infrai.cc/v1/dns
Auth header: Authorization: Bearer $INFRAI_API_KEY
bash
# Call any /v1/dns capability over raw HTTP — no SDK to install.
# curl:
curl https://api.infrai.cc/v1/dns/... \
  -H "Authorization: Bearer $INFRAI_API_KEY" \
  -H "Content-Type: application/json"

2. Methods (10)

2.1dns.domain.add

POST /v1/dns/domain/add

Bind a custom domain by creating a managed DNS zone at the vendor (Cloudflare / Route53 / AliDNS); returns zone_id + name servers. Not domain registration.

Parameters

NameTypeRequiredDescription
domainstring
Required
Apex domain, e.g. example.com.
vendorstringOptionalPin to a specific DNS vendor.
account_idstringOptionalVendor account id / caller reference.
metadataRecord<string, unknown>OptionalArbitrary key/value metadata.

Returns

Zone { zone_id, domain, nameservers, status }
NameTypeDescription
zone_idstringDNS zone identifier
domainstringDomain name
state"pending" | "active" | "verified" | "failed"Current lifecycle state of this resource
name_serversstring[]List of authoritative name servers for this zone

Example

一次性前置(每个范例都假定已完成):

bash
# No SDK to install — every call is a plain HTTPS request.
# Get a project key by signing in at https://infrai.cc/login (Google/GitHub gives
# you $2 free credit; email sign-in starts at $0). On 402 INSUFFICIENT_CREDIT, add
# funds at https://infrai.cc/billing (or POST /v1/account/topup and open the
# returned checkout_url).
export INFRAI_API_KEY="ifr_..."
bash
curl -X POST https://api.infrai.cc/v1/dns/domain/add \
  -H "Authorization: Bearer $INFRAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"domain": "sample"}'

2.2dns.domain.get

GET /v1/dns/domain/get

Fetch a bound domain (zone) by zone_id or name, returning its state and name servers.

Parameters

NameTypeRequiredDescription
domainstring
Required
Apex domain, e.g. example.com.
zone_idstringOptionalVendor zone id (preferred for get/verify/delete).
vendorstringOptionalPin to a specific DNS vendor.

Returns

Zone
NameTypeDescription
zone_idstringDNS zone identifier
domainstringDomain name
state"pending" | "active" | "verified" | "failed"Current lifecycle state of this resource
name_serversstring[]List of authoritative name servers for this zone

Example

一次性前置(每个范例都假定已完成):

bash
# No SDK to install — every call is a plain HTTPS request.
# Get a project key by signing in at https://infrai.cc/login (Google/GitHub gives
# you $2 free credit; email sign-in starts at $0). On 402 INSUFFICIENT_CREDIT, add
# funds at https://infrai.cc/billing (or POST /v1/account/topup and open the
# returned checkout_url).
export INFRAI_API_KEY="ifr_..."
bash
curl -X GET https://api.infrai.cc/v1/dns/domain/get \
  -H "Authorization: Bearer $INFRAI_API_KEY"

2.3dns.domain.list

GET /v1/dns/domain/list

List the bound custom domains (managed zones) for the account at the configured DNS vendor.

Parameters

NameTypeRequiredDescription
cursorstringOptionalOpaque pagination cursor.
limitnumberOptionalMaximum number of items to return.

Returns

{ items: Zone[], next_cursor?: string }
NameTypeDescription
domainsobject[]List of domain objects
domains[].zone_idstringDNS zone identifier
domains[].domainstringDomain name
domains[].state"pending" | "active" | "verified" | "failed"Current lifecycle state of this resource
domains[].name_serversstring[]List of authoritative name servers for this zone

Example

一次性前置(每个范例都假定已完成):

bash
# No SDK to install — every call is a plain HTTPS request.
# Get a project key by signing in at https://infrai.cc/login (Google/GitHub gives
# you $2 free credit; email sign-in starts at $0). On 402 INSUFFICIENT_CREDIT, add
# funds at https://infrai.cc/billing (or POST /v1/account/topup and open the
# returned checkout_url).
export INFRAI_API_KEY="ifr_..."
bash
curl -X GET https://api.infrai.cc/v1/dns/domain/list \
  -H "Authorization: Bearer $INFRAI_API_KEY"

2.4dns.domain.verify

POST /v1/dns/domain/verify

Verify a bound domain's activation/delegation against the same vendor zone it was created on (sticky_resource); read-only lookup of zone state.

Parameters

NameTypeRequiredDescription
domainstring
Required
Apex domain, e.g. example.com.
zone_idstringOptionalVendor zone id (preferred for get/verify/delete).
vendorstringOptionalPin to a specific DNS vendor.

Returns

{ verified: boolean, status }
NameTypeDescription
zone_idstringDNS zone identifier
domainstringDomain name
state"pending" | "active" | "verified" | "failed"Current lifecycle state of this resource
name_serversstring[]List of authoritative name servers for this zone

Example

一次性前置(每个范例都假定已完成):

bash
# No SDK to install — every call is a plain HTTPS request.
# Get a project key by signing in at https://infrai.cc/login (Google/GitHub gives
# you $2 free credit; email sign-in starts at $0). On 402 INSUFFICIENT_CREDIT, add
# funds at https://infrai.cc/billing (or POST /v1/account/topup and open the
# returned checkout_url).
export INFRAI_API_KEY="ifr_..."
bash
curl -X POST https://api.infrai.cc/v1/dns/domain/verify \
  -H "Authorization: Bearer $INFRAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"domain": "sample"}'

2.5dns.domain.delete

DELETE /v1/dns/domain/delete

Delete a bound domain's managed zone at the vendor (requires zone_id).

Parameters

NameTypeRequiredDescription
domainstring
Required
Apex domain, e.g. example.com.
zone_idstringOptionalVendor zone id (preferred for get/verify/delete).
vendorstringOptionalPin to a specific DNS vendor.

Returns

{ ok: boolean }
NameTypeDescription
deletedbooleanWhether the resource was successfully deleted
idstringDeleted zone_id or record_id.

Example

一次性前置(每个范例都假定已完成):

bash
# No SDK to install — every call is a plain HTTPS request.
# Get a project key by signing in at https://infrai.cc/login (Google/GitHub gives
# you $2 free credit; email sign-in starts at $0). On 402 INSUFFICIENT_CREDIT, add
# funds at https://infrai.cc/billing (or POST /v1/account/topup and open the
# returned checkout_url).
export INFRAI_API_KEY="ifr_..."
bash
curl -X DELETE https://api.infrai.cc/v1/dns/domain/delete \
  -H "Authorization: Bearer $INFRAI_API_KEY"

2.6dns.record.create

POST /v1/dns/record/create

Create a DNS record (A/AAAA/CNAME/TXT/MX) in a bound zone with TTL and optional MX priority / Cloudflare proxying.

Parameters

NameTypeRequiredDescription
zone_idstring
Required
Vendor zone id (preferred for get/verify/delete).
record_type"A" | "AAAA" | "CNAME" | "MX" | "TXT" | "NS" | "SRV"
Required
Record type — A, AAAA, CNAME, MX, TXT, NS, SRV.
namestring
Required
Record name, e.g. www or www.example.com.
contentstring
Required
IP / target / text value.
ttlnumberOptionalRecord TTL in seconds.
≥ 1default: 300
prioritynumberOptionalMX preference (MX only).
proxiedbooleanOptionalCloudflare orange-cloud (A/AAAA/CNAME only).
metadataRecord<string, unknown>OptionalArbitrary key/value metadata.

Returns

Record { record_id, type, name, content, ttl }
NameTypeDescription
record_idstringDNS record identifier
zone_idstringDNS zone identifier
record_type"A" | "AAAA" | "CNAME" | "TXT" | "MX"DNS record type (e.g. A, AAAA, CNAME, MX, TXT)
namestringHuman-readable name for this resource
contentstringDNS record value/content
ttlintegerTime-to-live in seconds for this DNS record
priorityinteger | nullPriority for MX or SRV records
proxiedboolean | nullWhether Cloudflare proxy is enabled for this record

Example

一次性前置(每个范例都假定已完成):

bash
# No SDK to install — every call is a plain HTTPS request.
# Get a project key by signing in at https://infrai.cc/login (Google/GitHub gives
# you $2 free credit; email sign-in starts at $0). On 402 INSUFFICIENT_CREDIT, add
# funds at https://infrai.cc/billing (or POST /v1/account/topup and open the
# returned checkout_url).
export INFRAI_API_KEY="ifr_..."
bash
curl -X POST https://api.infrai.cc/v1/dns/record/create \
  -H "Authorization: Bearer $INFRAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"zone_id": "sample", "record_type": "A", "name": "example", "content": "hello"}'

2.7dns.record.upsert

PUT /v1/dns/record/upsert

Idempotently create or update a DNS record by name + type in a bound zone (create-or-update) — safe to call repeatedly without duplicating records.

Parameters

NameTypeRequiredDescription
zone_idstring
Required
Vendor zone id (preferred for get/verify/delete).
record_type"A" | "AAAA" | "CNAME" | "MX" | "TXT"
Required
Record type — A, AAAA, CNAME, MX, TXT, NS, SRV.
namestring
Required
Record name, e.g. www or www.example.com.
contentstring
Required
IP / target / text value.
ttlnumberOptionalRecord TTL in seconds.
≥ 1default: 300
prioritynumberOptionalMX preference (MX only).
proxiedbooleanOptionalCloudflare orange-cloud (A/AAAA/CNAME only).
metadataRecord<string, unknown>OptionalArbitrary key/value metadata.

Returns

Record { record_id, type, name, content, ttl }
NameTypeDescription
record_idstringDNS record identifier
zone_idstringDNS zone identifier
record_type"A" | "AAAA" | "CNAME" | "TXT" | "MX"DNS record type (e.g. A, AAAA, CNAME, MX, TXT)
namestringHuman-readable name for this resource
contentstringDNS record value/content
ttlintegerTime-to-live in seconds for this DNS record
priorityinteger | nullPriority for MX or SRV records
proxiedboolean | nullWhether Cloudflare proxy is enabled for this record

Example

一次性前置(每个范例都假定已完成):

bash
# No SDK to install — every call is a plain HTTPS request.
# Get a project key by signing in at https://infrai.cc/login (Google/GitHub gives
# you $2 free credit; email sign-in starts at $0). On 402 INSUFFICIENT_CREDIT, add
# funds at https://infrai.cc/billing (or POST /v1/account/topup and open the
# returned checkout_url).
export INFRAI_API_KEY="ifr_..."
bash
curl -X PUT https://api.infrai.cc/v1/dns/record/upsert \
  -H "Authorization: Bearer $INFRAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"zone_id": "sample", "record_type": "A", "name": "example", "content": "hello"}'

2.8dns.record.list

GET /v1/dns/record/list

List DNS records in a bound zone.

Parameters

NameTypeRequiredDescription
zone_idstring
Required
Vendor zone id (preferred for get/verify/delete).
record_typestringOptionalRecord type — A, AAAA, CNAME, MX, TXT, NS, SRV.
namestringOptionalRecord name, e.g. www or www.example.com.

Returns

{ items: Record[] }
NameTypeDescription
recordsobject[]List of resource records
records[].record_idstringDNS record identifier
records[].zone_idstringDNS zone identifier
records[].record_type"A" | "AAAA" | "CNAME" | "TXT" | "MX"DNS record type (e.g. A, AAAA, CNAME, MX, TXT)
records[].namestringHuman-readable name for this resource
records[].contentstringDNS record value/content
records[].ttlintegerTime-to-live in seconds for this DNS record
records[].priorityinteger | nullPriority for MX or SRV records
records[].proxiedboolean | nullWhether Cloudflare proxy is enabled for this record

Example

一次性前置(每个范例都假定已完成):

bash
# No SDK to install — every call is a plain HTTPS request.
# Get a project key by signing in at https://infrai.cc/login (Google/GitHub gives
# you $2 free credit; email sign-in starts at $0). On 402 INSUFFICIENT_CREDIT, add
# funds at https://infrai.cc/billing (or POST /v1/account/topup and open the
# returned checkout_url).
export INFRAI_API_KEY="ifr_..."
bash
curl -X GET https://api.infrai.cc/v1/dns/record/list \
  -H "Authorization: Bearer $INFRAI_API_KEY"

2.9dns.record.update

PATCH /v1/dns/record/update

Update an existing DNS record (by record_id; Route53 uses UPSERT).

Parameters

NameTypeRequiredDescription
zone_idstring
Required
Vendor zone id (preferred for get/verify/delete).
record_idstringOptionalThe record id (for update/delete).
record_typestring
Required
Record type — A, AAAA, CNAME, MX, TXT, NS, SRV.
namestring
Required
Record name, e.g. www or www.example.com.
contentstring
Required
IP / target / text value.
ttlnumberOptionalRecord TTL in seconds.
≥ 1default: 300
prioritynumberOptionalMX preference (MX only).
proxiedbooleanOptionalCloudflare orange-cloud (A/AAAA/CNAME only).

Returns

Record
NameTypeDescription
record_idstringDNS record identifier
zone_idstringDNS zone identifier
record_type"A" | "AAAA" | "CNAME" | "TXT" | "MX"DNS record type (e.g. A, AAAA, CNAME, MX, TXT)
namestringHuman-readable name for this resource
contentstringDNS record value/content
ttlintegerTime-to-live in seconds for this DNS record
priorityinteger | nullPriority for MX or SRV records
proxiedboolean | nullWhether Cloudflare proxy is enabled for this record

Example

一次性前置(每个范例都假定已完成):

bash
# No SDK to install — every call is a plain HTTPS request.
# Get a project key by signing in at https://infrai.cc/login (Google/GitHub gives
# you $2 free credit; email sign-in starts at $0). On 402 INSUFFICIENT_CREDIT, add
# funds at https://infrai.cc/billing (or POST /v1/account/topup and open the
# returned checkout_url).
export INFRAI_API_KEY="ifr_..."
bash
curl -X PATCH https://api.infrai.cc/v1/dns/record/update \
  -H "Authorization: Bearer $INFRAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"zone_id": "sample", "record_type": "A", "name": "example", "content": "hello"}'

2.10dns.record.delete

DELETE /v1/dns/record/delete

Delete a DNS record from a bound zone (requires record_id).

Parameters

NameTypeRequiredDescription
zone_idstring
Required
Vendor zone id (preferred for get/verify/delete).
record_idstringOptionalThe record id (for update/delete).
record_typestringOptionalRecord type — A, AAAA, CNAME, MX, TXT, NS, SRV.
namestringOptionalRecord name, e.g. www or www.example.com.

Returns

{ ok: boolean }
NameTypeDescription
deletedbooleanWhether the resource was successfully deleted
idstringDeleted zone_id or record_id.

Example

一次性前置(每个范例都假定已完成):

bash
# No SDK to install — every call is a plain HTTPS request.
# Get a project key by signing in at https://infrai.cc/login (Google/GitHub gives
# you $2 free credit; email sign-in starts at $0). On 402 INSUFFICIENT_CREDIT, add
# funds at https://infrai.cc/billing (or POST /v1/account/topup and open the
# returned checkout_url).
export INFRAI_API_KEY="ifr_..."
bash
curl -X DELETE https://api.infrai.cc/v1/dns/record/delete \
  -H "Authorization: Bearer $INFRAI_API_KEY"
Advanced: pin a vendor

By default infrai routes each call to the best available provider — you do not pick a vendor. As an escape hatch, this capability accepts an optional vendor parameter to pin one specific provider. Every live vendor for this capability is available in real time from the discovery endpoint for the capability id — see the discovery API.

GET /v1/discovery/{capability}

dns.domain.add

dns.domain.get

dns.domain.verify

dns.domain.delete

3. All capabilities

Every routed capability in this module — the complete public REST contract. The methods above are the guided walkthrough; this index is the full reference.

dns.domain.addPOST /v1/dns/domain/add

Bind a domain YOU already own: Infrai creates a managed DNS zone for it at the vendor (Cloudflare / Route53 / AliDNS) and returns zone_id + name servers — point your registrar's NS at them to activate. Not domain registration (you must already own the name).

Parameters (4)
NameTypeRequiredDescription
domainstringRequiredApex domain, e.g. example.com.
vendor"cloudflare" | "route53" | "aliyun_dns" | nullOptionalPin to a DNS vendor (explicit).
account_idstring | nullOptionalVendor account id / caller-reference.
metadataobject | nullOptionalArbitrary key-value metadata attached to this resource
dns.domain.deleteDELETE /v1/dns/domain/delete

Delete a bound domain's managed zone at the vendor (requires zone_id).

Parameters (3)
NameTypeRequiredDescription
domainstringRequiredDomain name
zone_idstring | nullOptionalVendor zone id (preferred for get/verify/delete).
vendor"cloudflare" | "route53" | "aliyun_dns" | nullOptionalVendor that handled or will handle this request
dns.domain.getGET /v1/dns/domain/get

Fetch a bound domain (zone) by zone_id or name, returning its state and name servers.

Parameters (3)
NameTypeRequiredDescription
domainstringRequiredDomain name
zone_idstring | nullOptionalVendor zone id (preferred for get/verify/delete).
vendor"cloudflare" | "route53" | "aliyun_dns" | nullOptionalVendor that handled or will handle this request
dns.domain.listGET /v1/dns/domain/list

List the domains YOU have bound (managed zones) at the DNS vendor. Empty until you bind one via dns.domain.add — a new account manages no domains yet (an empty list is expected, not an error).

No request parameters.

dns.domain.verifyPOST /v1/dns/domain/verify

Verify a bound domain's activation/delegation against the same vendor zone it was created on (sticky_resource); read-only lookup of zone state.

Parameters (3)
NameTypeRequiredDescription
domainstringRequiredDomain name
zone_idstring | nullOptionalVendor zone id (preferred for get/verify/delete).
vendor"cloudflare" | "route53" | "aliyun_dns" | nullOptionalVendor that handled or will handle this request
dns.record.createPOST /v1/dns/record/create

Create a DNS record (A/AAAA/CNAME/TXT/MX) in a bound zone with TTL and optional MX priority / Cloudflare proxying.

Parameters (9)
NameTypeRequiredDescription
zone_idstringRequiredDNS zone identifier
record_type"A" | "AAAA" | "CNAME" | "TXT" | "MX"RequiredDNS record type (e.g. A, AAAA, CNAME, MX, TXT)
namestringRequiredRecord name, e.g. www or www.example.com.
contentstringRequiredIP / target / text value.
ttlintegerOptionalTime-to-live in seconds for this DNS record
≥ 1default: 300
priorityinteger | nullOptionalMX preference (MX only).
proxiedboolean | nullOptionalCloudflare orange-cloud (A/AAAA/CNAME only).
record_idstring | nullOptionalRequired for dns.record.update.
metadataobject | nullOptionalArbitrary key-value metadata attached to this resource
dns.record.deleteDELETE /v1/dns/record/delete

Delete a DNS record from a bound zone (requires record_id).

Parameters (4)
NameTypeRequiredDescription
zone_idstringRequiredDNS zone identifier
record_idstring | nullOptionalRequired for dns.record.delete.
record_type"A" | "AAAA" | "CNAME" | "TXT" | "MX" | nullOptionalDNS record type (e.g. A, AAAA, CNAME, MX, TXT)
namestring | nullOptionalHuman-readable name for this resource
dns.record.listGET /v1/dns/record/list

List DNS records in a bound zone.

Parameters (4)
NameTypeRequiredDescription
zone_idstringRequiredDNS zone identifier
record_idstring | nullOptionalRequired for dns.record.delete.
record_type"A" | "AAAA" | "CNAME" | "TXT" | "MX" | nullOptionalDNS record type (e.g. A, AAAA, CNAME, MX, TXT)
namestring | nullOptionalHuman-readable name for this resource
dns.record.updatePATCH /v1/dns/record/update

Update an existing DNS record (by record_id; Route53 uses UPSERT).

Parameters (9)
NameTypeRequiredDescription
zone_idstringRequiredDNS zone identifier
record_type"A" | "AAAA" | "CNAME" | "TXT" | "MX"RequiredDNS record type (e.g. A, AAAA, CNAME, MX, TXT)
namestringRequiredRecord name, e.g. www or www.example.com.
contentstringRequiredIP / target / text value.
ttlintegerOptionalTime-to-live in seconds for this DNS record
≥ 1default: 300
priorityinteger | nullOptionalMX preference (MX only).
proxiedboolean | nullOptionalCloudflare orange-cloud (A/AAAA/CNAME only).
record_idstring | nullOptionalRequired for dns.record.update.
metadataobject | nullOptionalArbitrary key-value metadata attached to this resource
dns.record.upsertPUT /v1/dns/record/upsert

Idempotently ensure a DNS record exists with a given value — create it if absent, update it in place if a single record of the same type+name exists, no-op if already identical. The declarative, no-list-first primitive for automation: ACME / Let's Encrypt DNS-01 challenge TXT records, pointing www/CNAME at a deploy, SPF/DKIM/DMARC setup, and infrastructure-as-code reconcile. Matched by (type, name); if several records share that type+name (e.g. round-robin A or multiple concurrent _acme-challenge TXT) it is ambiguous — use record.create to append or record.update with an explicit record_id.

Parameters (9)
NameTypeRequiredDescription
zone_idstringRequiredDNS zone identifier
record_type"A" | "AAAA" | "CNAME" | "TXT" | "MX"RequiredDNS record type (e.g. A, AAAA, CNAME, MX, TXT)
namestringRequiredRecord name, e.g. www or www.example.com.
contentstringRequiredIP / target / text value.
ttlintegerOptionalTime-to-live in seconds for this DNS record
≥ 1default: 300
priorityinteger | nullOptionalMX preference (MX only).
proxiedboolean | nullOptionalCloudflare orange-cloud (A/AAAA/CNAME only).
record_idstring | nullOptionalRequired for dns.record.update.
metadataobject | nullOptionalArbitrary key-value metadata attached to this resource

4. End-to-end example

A production-style walkthrough of this module: configure once, then run the flow. It exercises most of the module's APIs.

A copy-paste-runnable single-file Python program (stdlib only, no SDK): set your INFRAI_API_KEY, run it, and walk this module's core flow with REAL billed calls — later steps reuse real fields returned by earlier ones. The 12-line helper is the entire integration.

python
#!/usr/bin/env python3
"""Infrai · dns — runnable real-app example (single file, zero deps).

Copy this file, set your key, run it: every step is a REAL call to
api.infrai.cc, billed at the real (tiny) per-call price, printing the
live JSON response. Get a key at https://infrai.cc/login (Google/
GitHub sign-in grants $2 free credit); add funds at
https://infrai.cc/billing. No SDK — the 12-line helper below is the
entire integration."""
import json
import os
from urllib import error, request

KEY = os.environ.get("INFRAI_API_KEY") or "ifr_..."  # <- your key
BASE = "https://api.infrai.cc"


# Same raw HTTPS POST/GET as every per-method example on this page —
# wrapped once for reuse. There is nothing else to it: no SDK.
def infrai(method, path, body=None):
    req = request.Request(
        BASE + path, method=method,
        data=json.dumps(body).encode() if body is not None else None,
        headers={"Authorization": f"Bearer {KEY}",
                 "Content-Type": "application/json"})
    try:
        with request.urlopen(req, timeout=60) as r:
            return json.loads(r.read())
    except error.HTTPError as e:
        return json.loads(e.read())


def show(label, resp):
    print(f"\n== {label} ==")
    print(json.dumps(resp, indent=2, ensure_ascii=False))
    return resp


# 1) dns.domain.add — POST /v1/dns/domain/add · Bind a domain YOU already own: Infrai creates a managed DNS zone for it at the vendor (Cloudflare / Route53 / AliDNS) and returns zone_id + name servers — point your registrar's NS at them to activate. Not domain registration (you must already own the name).
r1 = show("dns.domain.add", infrai("POST", "/v1/dns/domain/add", {"domain":"sample"}))

# 2) dns.domain.verify — POST /v1/dns/domain/verify · Verify a bound domain's activation/delegation against the same vendor zone it was created on (sticky_resource); read-only lookup of zone state.
r2 = show("dns.domain.verify", infrai("POST", "/v1/dns/domain/verify", {"domain":"sample"}))

# 3) dns.record.create — POST /v1/dns/record/create · Create a DNS record (A/AAAA/CNAME/TXT/MX) in a bound zone with TTL and optional MX priority / Cloudflare proxying.
r3 = show("dns.record.create", infrai("POST", "/v1/dns/record/create", {"zone_id":"sample","record_type":"A","name":"example","content":"hello"}))

# 4) dns.domain.get — GET /v1/dns/domain/get · Fetch a bound domain (zone) by zone_id or name, returning its state and name servers.
r4 = show("dns.domain.get", infrai("GET", "/v1/dns/domain/get"))