Rackspace Cloud DNS API

The Rackspace Cloud DNS API (1.0) provides programmatic management of DNS zones and records hosted on the Rackspace Cloud.

OpenAPI Specification

rackspace-cloud-dns.yaml Raw ↑
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 }