openapi: 3.0.3
info:
title: Rackspace Cloud DNS API
version: '1.0'
description: >-
The Rackspace Cloud DNS API (v1.0) provides programmatic management of DNS
zones and records hosted on the Rackspace Cloud. Operations include
listing, creating, updating, importing, exporting, and cloning domains,
plus full CRUD on standard DNS records and reverse DNS PTR records, with
support for paginated listings, asynchronous job tracking, and per-account
usage limits.
contact:
name: Rackspace Technology
url: https://www.rackspace.com/
license:
name: Apache 2.0
url: https://www.apache.org/licenses/LICENSE-2.0
x-generated-from: documentation
x-source-url: https://github.com/rackerlabs/docs-cloud-dns
x-last-validated: '2026-05-05'
servers:
- url: https://dns.api.rackspacecloud.com/v1.0
description: Rackspace Cloud DNS production endpoint
security:
- AuthToken: []
tags:
- name: Domains
description: DNS domain (zone) operations.
- name: Records
description: DNS record operations within a domain.
- name: ReverseDNS
description: Reverse DNS (PTR) record operations.
- name: Limits
description: Per-account usage limits and rate caps.
paths:
/{account}/limits:
parameters:
- $ref: '#/components/parameters/AccountId'
get:
operationId: listLimits
summary: List Limits
description: Provides a list of all applicable limits (rate and absolute) for the specified account.
tags: [Limits]
responses:
'200':
description: Limits returned.
content:
application/json:
schema:
$ref: '#/components/schemas/Limits'
'401': { $ref: '#/components/responses/Unauthorized' }
'503': { $ref: '#/components/responses/ServiceUnavailable' }
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
/{account}/limits/types:
parameters:
- $ref: '#/components/parameters/AccountId'
get:
operationId: listLimitTypes
summary: List Limit Types
description: Returns the list of limit types (rate and absolute) supported by the DNS service for this account.
tags: [Limits]
responses:
'200':
description: Limit types returned.
content:
application/json:
schema:
$ref: '#/components/schemas/LimitTypes'
'401': { $ref: '#/components/responses/Unauthorized' }
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
/{account}/limits/{type}:
parameters:
- $ref: '#/components/parameters/AccountId'
- in: path
name: type
required: true
description: The specific limit type to retrieve (for example, RATE_LIMIT or DOMAIN_LIMIT).
schema: { type: string }
get:
operationId: showLimit
summary: Show Limit
description: Retrieves details for a single named limit type.
tags: [Limits]
responses:
'200':
description: Limit details returned.
content:
application/json:
schema:
$ref: '#/components/schemas/Limit'
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
/{account}/domains:
parameters:
- $ref: '#/components/parameters/AccountId'
get:
operationId: listDomains
summary: List Domains
description: >-
Lists all DNS domains manageable by the specified account. The
resulting list is flat (subdomains are not nested) and returns by
default a maximum of 100 items per page; navigate using the limit and
offset query parameters.
tags: [Domains]
parameters:
- $ref: '#/components/parameters/Limit'
- $ref: '#/components/parameters/Offset'
- in: query
name: name
required: false
description: Filter the listing to domains whose name starts with this string.
schema: { type: string }
responses:
'200':
description: Domains list returned.
content:
application/json:
schema:
$ref: '#/components/schemas/DomainList'
example:
domains:
- id: '2725233'
name: example.com
accountId: '1234'
emailAddress: [email protected]
comment: Optional domain comment.
created: '2011-06-24T01:12:51.000+0000'
updated: '2011-06-24T01:23:15.000+0000'
totalEntries: 1
'400': { $ref: '#/components/responses/BadRequest' }
'401': { $ref: '#/components/responses/Unauthorized' }
'413': { $ref: '#/components/responses/OverLimit' }
'503': { $ref: '#/components/responses/ServiceUnavailable' }
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
post:
operationId: createDomains
summary: Create Domains
description: >-
Creates one or more DNS domains under the specified account. Returns an
asynchronous 202 response containing a callback URL that can be polled
for completion status.
tags: [Domains]
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateDomainsRequest'
responses:
'202': { $ref: '#/components/responses/AsyncJobAccepted' }
'400': { $ref: '#/components/responses/BadRequest' }
'401': { $ref: '#/components/responses/Unauthorized' }
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
put:
operationId: updateDomains
summary: Update Domains
description: Updates one or more existing DNS domains under the account.
tags: [Domains]
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateDomainsRequest'
responses:
'202': { $ref: '#/components/responses/AsyncJobAccepted' }
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
delete:
operationId: deleteDomains
summary: Delete Domains
description: Deletes one or more DNS domains by ID.
tags: [Domains]
parameters:
- in: query
name: id
required: true
description: One or more domain IDs to delete.
schema:
type: array
items: { type: string }
style: form
explode: true
responses:
'202': { $ref: '#/components/responses/AsyncJobAccepted' }
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
/{account}/domains/search:
parameters:
- $ref: '#/components/parameters/AccountId'
get:
operationId: searchDomains
summary: Search Domains
description: Searches the account's domains by name fragment.
tags: [Domains]
parameters:
- in: query
name: name
required: true
description: Substring of the domain name to match.
schema: { type: string }
responses:
'200':
description: Matching domains returned.
content:
application/json:
schema:
$ref: '#/components/schemas/DomainList'
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
/{account}/domains/import:
parameters:
- $ref: '#/components/parameters/AccountId'
post:
operationId: importDomain
summary: Import Domain
description: Imports a DNS domain definition supplied as a BIND9-formatted contents block.
tags: [Domains]
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ImportDomainRequest'
responses:
'202': { $ref: '#/components/responses/AsyncJobAccepted' }
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
/{account}/domains/{domainId}:
parameters:
- $ref: '#/components/parameters/AccountId'
- $ref: '#/components/parameters/DomainId'
get:
operationId: showDomain
summary: Show Domain
description: Returns details for the specified domain. Set showRecords or showSubdomains to include nested data.
tags: [Domains]
parameters:
- in: query
name: showRecords
required: false
schema: { type: boolean }
description: Include this domain's records in the response.
- in: query
name: showSubdomains
required: false
schema: { type: boolean }
description: Include this domain's subdomains in the response.
responses:
'200':
description: Domain returned.
content:
application/json:
schema:
$ref: '#/components/schemas/Domain'
'404': { $ref: '#/components/responses/NotFound' }
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
put:
operationId: updateDomain
summary: Update Domain
description: Updates a single existing DNS domain.
tags: [Domains]
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateDomainRequest'
responses:
'202': { $ref: '#/components/responses/AsyncJobAccepted' }
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
delete:
operationId: deleteDomain
summary: Delete Domain
description: Deletes a single DNS domain. Use the deleteSubdomains query parameter to also delete its subdomains.
tags: [Domains]
parameters:
- in: query
name: deleteSubdomains
required: false
description: When true, all subdomains are deleted along with the domain.
schema: { type: boolean, default: false }
responses:
'202': { $ref: '#/components/responses/AsyncJobAccepted' }
'404': { $ref: '#/components/responses/NotFound' }
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
/{account}/domains/{domainId}/changes:
parameters:
- $ref: '#/components/parameters/AccountId'
- $ref: '#/components/parameters/DomainId'
get:
operationId: showDomainChanges
summary: Show Domain Changes
description: Returns a list of changes to the specified domain.
tags: [Domains]
parameters:
- in: query
name: changes
required: false
description: ISO-8601 timestamp filter; only changes since this date are returned.
schema: { type: string, format: date-time }
responses:
'200':
description: Change history returned.
content:
application/json:
schema:
$ref: '#/components/schemas/DomainChanges'
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
/{account}/domains/{domainId}/export:
parameters:
- $ref: '#/components/parameters/AccountId'
- $ref: '#/components/parameters/DomainId'
get:
operationId: exportDomain
summary: Export Domain
description: Exports the BIND9-formatted contents of a domain.
tags: [Domains]
responses:
'202': { $ref: '#/components/responses/AsyncJobAccepted' }
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
/{account}/domains/{domainId}/clone:
parameters:
- $ref: '#/components/parameters/AccountId'
- $ref: '#/components/parameters/DomainId'
post:
operationId: cloneDomain
summary: Clone Domain
description: Clones the specified domain to a new domain name.
tags: [Domains]
parameters:
- in: query
name: cloneName
required: true
description: New name to use for the clone.
schema: { type: string }
- in: query
name: cloneSubdomains
required: false
schema: { type: boolean, default: true }
- in: query
name: modifyRecordData
required: false
schema: { type: boolean, default: true }
- in: query
name: modifyEmailAddress
required: false
schema: { type: boolean, default: true }
- in: query
name: modifyComment
required: false
schema: { type: boolean, default: true }
responses:
'202': { $ref: '#/components/responses/AsyncJobAccepted' }
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
/{account}/domains/{domainId}/subdomains:
parameters:
- $ref: '#/components/parameters/AccountId'
- $ref: '#/components/parameters/DomainId'
get:
operationId: listSubdomains
summary: List Subdomains
description: Lists subdomains for a domain.
tags: [Domains]
parameters:
- $ref: '#/components/parameters/Limit'
- $ref: '#/components/parameters/Offset'
responses:
'200':
description: Subdomains returned.
content:
application/json:
schema:
$ref: '#/components/schemas/DomainList'
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
/{account}/domains/{domainId}/records:
parameters:
- $ref: '#/components/parameters/AccountId'
- $ref: '#/components/parameters/DomainId'
get:
operationId: listRecords
summary: List Records
description: Lists DNS records for the specified domain. Supports filtering by type, name, and data.
tags: [Records]
parameters:
- in: query
name: type
required: false
description: Filter by record type (A, AAAA, MX, CNAME, NS, TXT, SRV).
schema: { type: string }
- in: query
name: name
required: false
schema: { type: string }
- in: query
name: data
required: false
schema: { type: string }
- $ref: '#/components/parameters/Limit'
- $ref: '#/components/parameters/Offset'
responses:
'200':
description: Records returned.
content:
application/json:
schema:
$ref: '#/components/schemas/RecordList'
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
post:
operationId: addRecords
summary: Add Records
description: Adds one or more DNS records to the specified domain.
tags: [Records]
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AddRecordsRequest'
responses:
'202': { $ref: '#/components/responses/AsyncJobAccepted' }
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
delete:
operationId: deleteRecords
summary: Delete Records
description: Deletes multiple DNS records by ID.
tags: [Records]
parameters:
- in: query
name: id
required: true
schema:
type: array
items: { type: string }
style: form
explode: true
responses:
'202': { $ref: '#/components/responses/AsyncJobAccepted' }
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
/{account}/domains/{domainId}/records/{recordId}:
parameters:
- $ref: '#/components/parameters/AccountId'
- $ref: '#/components/parameters/DomainId'
- $ref: '#/components/parameters/RecordId'
get:
operationId: showRecord
summary: Show Record
description: Returns details for a single DNS record.
tags: [Records]
responses:
'200':
description: Record returned.
content:
application/json:
schema:
$ref: '#/components/schemas/Record'
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
delete:
operationId: deleteRecord
summary: Delete Record
description: Deletes a single DNS record.
tags: [Records]
responses:
'202': { $ref: '#/components/responses/AsyncJobAccepted' }
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
/{account}/rdns:
parameters:
- $ref: '#/components/parameters/AccountId'
post:
operationId: addPtrRecords
summary: Add PTR Records
description: Adds reverse DNS (PTR) records for one or more cloud devices (servers, load balancers).
tags: [ReverseDNS]
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AddPtrRecordsRequest'
responses:
'202': { $ref: '#/components/responses/AsyncJobAccepted' }
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
/{account}/rdns/{serviceName}:
parameters:
- $ref: '#/components/parameters/AccountId'
- in: path
name: serviceName
required: true
description: The cloud service whose PTR records are being managed (cloudServersOpenStack, cloudLoadBalancers).
schema: { type: string }
get:
operationId: listPtrRecords
summary: List PTR Records
description: Lists PTR records for the specified service and device.
tags: [ReverseDNS]
parameters:
- in: query
name: href
required: true
description: The fully qualified device URL whose PTR records should be listed.
schema: { type: string, format: uri }
responses:
'200':
description: PTR records returned.
content:
application/json:
schema:
$ref: '#/components/schemas/RecordList'
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
delete:
operationId: deletePtrRecords
summary: Delete PTR Records
description: Deletes PTR records for the specified device.
tags: [ReverseDNS]
parameters:
- in: query
name: href
required: true
schema: { type: string, format: uri }
- in: query
name: ip
required: false
schema: { type: string }
responses:
'202': { $ref: '#/components/responses/AsyncJobAccepted' }
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
/{account}/rdns/{serviceName}/{recordId}:
parameters:
- $ref: '#/components/parameters/AccountId'
- in: path
name: serviceName
required: true
schema: { type: string }
- $ref: '#/components/parameters/RecordId'
get:
operationId: showPtrRecord
summary: Show PTR Record
description: Returns details for a single PTR record.
tags: [ReverseDNS]
responses:
'200':
description: PTR record returned.
content:
application/json:
schema:
$ref: '#/components/schemas/Record'
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
components:
securitySchemes:
AuthToken:
type: apiKey
in: header
name: X-Auth-Token
description: Rackspace Cloud Identity-issued authentication token.
parameters:
AccountId:
in: path
name: account
required: true
description: The Rackspace Cloud account (tenant) ID.
schema: { type: string }
DomainId:
in: path
name: domainId
required: true
description: The Rackspace Cloud DNS domain ID.
schema: { type: string }
RecordId:
in: path
name: recordId
required: true
description: The Rackspace Cloud DNS record ID.
schema: { type: string }
Limit:
in: query
name: limit
required: false
description: Maximum number of items to return (default 100).
schema: { type: integer, default: 100, minimum: 1, maximum: 100 }
Offset:
in: query
name: offset
required: false
description: Zero-based offset into the result set.
schema: { type: integer, default: 0, minimum: 0 }
responses:
BadRequest:
description: The request is missing one or more elements, or values are invalid.
content:
application/json:
schema: { $ref: '#/components/schemas/Fault' }
Unauthorized:
description: You are not authorized to complete this operation.
content:
application/json:
schema: { $ref: '#/components/schemas/Fault' }
NotFound:
description: The requested item was not found.
content:
application/json:
schema: { $ref: '#/components/schemas/Fault' }
OverLimit:
description: The number of items returned is above the allowed limit.
content:
application/json:
schema: { $ref: '#/components/schemas/Fault' }
ServiceUnavailable:
description: The DNS service is not available.
content:
application/json:
schema: { $ref: '#/components/schemas/Fault' }
AsyncJobAccepted:
description: The asynchronous job has been accepted; poll the callbackUrl until status is COMPLETED.
content:
application/json:
schema:
$ref: '#/components/schemas/AsyncJob'
schemas:
Domain:
title: Domain
type: object
description: A DNS zone manageable by the account.
properties:
id: { type: string, description: Domain identifier. }
accountId: { type: string, description: Tenant identifier that owns the domain. }
name: { type: string, description: Fully qualified domain name. }
emailAddress: { type: string, format: email, description: Administrative email contact (used as SOA RNAME). }
ttl: { type: integer, description: Default record TTL in seconds (>= 300). }
comment: { type: string, description: Optional administrative comment. }
nameservers:
type: array
items:
type: object
properties:
name: { type: string }
recordsList:
$ref: '#/components/schemas/RecordList'
subdomains:
$ref: '#/components/schemas/DomainList'
created: { type: string, format: date-time }
updated: { type: string, format: date-time }
DomainList:
title: DomainList
type: object
properties:
domains:
type: array
items: { $ref: '#/components/schemas/Domain' }
totalEntries: { type: integer }
links:
type: array
items: { $ref: '#/components/schemas/Link' }
DomainChanges:
title: DomainChanges
type: object
properties:
from: { type: string, format: date-time }
to: { type: string, format: date-time }
totalEntries: { type: integer }
changes:
type: array
items:
type: object
properties:
domain: { type: string }
action: { type: string }
targetType: { type: string }
targetId: { type: string }
accountId: { type: string }
changeDetails:
type: array
items:
type: object
properties:
field: { type: string }
originalValue: { type: string }
newValue: { type: string }
CreateDomainsRequest:
title: CreateDomainsRequest
type: object
required: [domains]
properties:
domains:
type: array
items:
type: object
required: [name, emailAddress]
properties:
name: { type: string }
ttl: { type: integer, minimum: 300 }
emailAddress: { type: string, format: email }
comment: { type: string }
recordsList:
type: object
properties:
records:
type: array
items: { $ref: '#/components/schemas/RecordInput' }
subdomains:
type: object
properties:
domains:
type: array
items: { $ref: '#/components/schemas/Domain' }
UpdateDomainRequest:
title: UpdateDomainRequest
type: object
properties:
ttl: { type: integer, minimum: 300 }
emailAddress: { type: string, format: email }
comment: { type: string }
UpdateDomainsRequest:
title: UpdateDomainsRequest
type: object
properties:
domains:
type: array
items:
allOf:
- type: object
properties:
id: { type: string }
- $ref: '#/components/schemas/UpdateDomainRequest'
ImportDomainRequest:
title: ImportDomainRequest
type: object
required: [domains]
properties:
domains:
type: array
items:
type: object
required: [contentType, contents]
properties:
contentType: { type: string, enum: [BIND_9] }
contents: { type: string, description: BIND9-formatted zone file contents. }
Record:
title: Record
type: object
properties:
id: { type: string }
name: { type: string }
type: { type: string, enum: [A, AAAA, MX, CNAME, NS, TXT, SRV, PTR] }
data: { type: string }
ttl: { type: integer, minimum: 300 }
priority: { type: integer, description: Required for MX and SRV records. }
comment: { type: string }
created: { type: string, format: date-time }
updated: { type: string, format: date-time }
RecordInput:
title: RecordInput
type: object
required: [type, name, data]
properties:
type: { type: string, enum: [A, AAAA, MX, CNAME, NS, TXT, SRV, PTR] }
name: { type: string }
data: { type: string }
ttl: { type: integer, minimum: 300 }
priority: { type: integer }
comment: { type: string }
RecordList:
title: RecordList
type: object
properties:
records:
type: array
items: { $ref: '#/components/schemas/Record' }
totalEntries: { type: integer }
links:
type: array
items: { $ref: '#/components/schemas/Link' }
AddRecordsRequest:
title: AddRecordsRequest
type: object
required: [records]
properties:
records:
type: array
items: { $ref: '#/components/schemas/RecordInput' }
AddPtrRecordsRequest:
title: AddPtrRecordsRequest
type: object
required: [recordsList, link]
properties:
recordsList:
type: object
properties:
records:
type: array
items: { $ref: '#/components/schemas/RecordInput' }
link:
type: object
properties:
content: { type: string }
href: { type: string, format: uri }
rel: { type: string }
Link:
title: Link
type: object
properties:
rel: { type: string }
href: { type: string, format: uri }
content: { type: string }
Limit:
title: Limit
type: object
properties:
verb: { type: string }
URI: { type: string }
regex: { type: string }
value: { type: integer }
remaining: { type: integer }
unit: { type: string }
resetTime: { type: integer, format: int64 }
Limits:
title: Limits
type: object
properties:
rate:
type: array
items:
type: object
properties:
uri: { type: string }
regex: { type: string }
limit:
type: array
items: { $ref: '#/components/schemas/Limit' }
absolute:
type: object
additionalProperties: { type: integer }
LimitTypes:
title: LimitTypes
type: object
properties:
limitTypes:
type: array
items: { type: string }
AsyncJob:
title: AsyncJob
type: object
properties:
callbackUrl: { type: string, format: uri }
status: { type: string, enum: [INITIALIZED, RUNNING, COMPLETED, ERROR] }
requestUrl: { type: string, format: uri }
verb: { type: string }
jobId: { type: string }
response:
type: object
additionalProperties: true
Fault:
title: Fault
type: object
properties:
code: { type: integer }
message: { type: string }
details: { type: string }