openapi: 3.0.0
info:
  license:
    name: MIT
    url: https://github.com/aziontech/azionapi-openapi/blob/main/LICENSE.md
  title: Intelligent DNS API
  version: 1.0.0
servers:
- description: Production
  url: https://api.azionapi.net
security:
- tokenAuth: []
paths:
  /intelligent_dns:
    get:
      operationId: getZones
      parameters:
      - description: Identifies which property the return should be sorted by.
        explode: true
        in: query
        name: order_by
        required: false
        schema:
          default: name
          enum:
          - id
          - name
          - domain
          - is_active
          type: string
        style: form
      - description: Defines whether objects are shown in ascending or descending
          order depending on the value set in order_by.
        explode: true
        in: query
        name: sort
        required: false
        schema:
          default: asc
          enum:
          - asc
          - desc
          type: string
        style: form
      - description: "Identifies which page should be returned, if the return is paginated."
        explode: true
        in: query
        name: page
        required: false
        schema:
          default: 1
          format: int64
          type: integer
        style: form
      - description: Identifies how many items should be returned per page.
        explode: true
        in: query
        name: page_size
        required: false
        schema:
          default: 10
          format: int64
          type: integer
        style: form
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetZonesResponse'
          description: Zones collection retrieved
        "400":
          content:
            application/json; version=3:
              schema:
                $ref: '#/components/schemas/ErrorsResponse'
          description: Error
      summary: Get a collection of Intelligent DNS zones
      tags:
      - Zones
    post:
      operationId: postZone
      requestBody:
        content:
          application/json:
            example:
              name: New Intelligent DNS zone
              domain: new.domain.com
              is_active: true
            schema:
              $ref: '#/components/schemas/Zone'
      responses:
        "201":
          content:
            application/json; version=3:
              schema:
                $ref: '#/components/schemas/PostOrPutZoneResponse'
          description: Zone added
        "400":
          content:
            application/json; version=3:
              schema:
                $ref: '#/components/schemas/ErrorsResponse'
          description: Error
        "404":
          content:
            application/json; version=3:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Zone not found
      summary: Add a new Intelligent DNS zone
      tags:
      - Zones
  /intelligent_dns/{zone_id}:
    delete:
      operationId: deleteZone
      parameters:
      - description: The hosted zone id
        explode: false
        in: path
        name: zone_id
        required: true
        schema:
          minimum: 1
          type: integer
        style: simple
      responses:
        "204":
          content:
            application/json; version=3:
              schema:
                nullable: true
                type: string
          description: Zone removed
        "404":
          content:
            application/json; version=3:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Zone not found
      summary: Remove an Intelligent DNS hosted zone
      tags:
      - Zones
    get:
      operationId: getZone
      parameters:
      - description: The hosted zone id
        explode: false
        in: path
        name: zone_id
        required: true
        schema:
          minimum: 1
          type: integer
        style: simple
      responses:
        "200":
          content:
            application/json; version=3:
              schema:
                $ref: '#/components/schemas/GetZoneResponse'
          description: Zone retrieved
        "404":
          content:
            application/json; version=3:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Zone not found
      summary: Get an Intelligent DNS hosted zone
      tags:
      - Zones
    put:
      operationId: putZone
      parameters:
      - description: The hosted zone id
        explode: false
        in: path
        name: zone_id
        required: true
        schema:
          minimum: 1
          type: integer
        style: simple
      requestBody:
        content:
          application/json:
            example:
              name: Update Intelligent DNS zone
              domain: other.domain.com
              is_active: true
            schema:
              $ref: '#/components/schemas/Zone'
      responses:
        "201":
          content:
            application/json; version=3:
              schema:
                $ref: '#/components/schemas/PostOrPutZoneResponse'
          description: Zone updated
        "400":
          content:
            application/json; version=3:
              schema:
                $ref: '#/components/schemas/ErrorsResponse'
          description: Zone update error
      summary: Update an Intelligent DNS hosted zone
      tags:
      - Zones
  /intelligent_dns/{zone_id}/records:
    get:
      operationId: getZoneRecords
      parameters:
      - description: The hosted zone id
        explode: false
        in: path
        name: zone_id
        required: true
        schema:
          minimum: 1
          type: integer
        style: simple
      - description: "Identifies which page should be returned, if the return is paginated."
        explode: true
        in: query
        name: page
        required: false
        schema:
          default: 1
          format: int64
          type: integer
        style: form
      - description: Identifies how many items should be returned per page.
        explode: true
        in: query
        name: page_size
        required: false
        schema:
          default: 10
          format: int64
          type: integer
        style: form
      responses:
        "200":
          content:
            application/json; version=3:
              schema:
                $ref: '#/components/schemas/GetRecordsResponse'
          description: Zones collection retrieved
        "400":
          content:
            application/json; version=3:
              schema:
                $ref: '#/components/schemas/ErrorsResponse'
          description: Error
        "404":
          content:
            application/json; version=3:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Zone not found
      summary: Get a collection of Intelligent DNS zone records
      tags:
      - Records
    post:
      operationId: postZoneRecord
      parameters:
      - description: The hosted zone id
        explode: false
        in: path
        name: zone_id
        required: true
        schema:
          minimum: 1
          type: integer
        style: simple
      requestBody:
        content:
          application/json:
            example:
              record_type: A
              entry: site
              description: Site record
              ttl: 3600
              answers_list:
              - 1.2.3.4
              - 5.6.7.8
            schema:
              $ref: '#/components/schemas/RecordPostOrPut'
      responses:
        "201":
          content:
            application/json; version=3:
              schema:
                $ref: '#/components/schemas/PostOrPutRecordResponse'
          description: Record added
        "400":
          content:
            application/json; version=3:
              schema:
                $ref: '#/components/schemas/ErrorsResponse'
          description: Error
        "404":
          content:
            application/json; version=3:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Zone not found
      summary: Create a new Intelligent DNS zone record
      tags:
      - Records
  /intelligent_dns/{zone_id}/records/{record_id}:
    delete:
      operationId: deleteZoneRecord
      parameters:
      - description: The hosted zone id
        explode: false
        in: path
        name: zone_id
        required: true
        schema:
          minimum: 1
          type: integer
        style: simple
      - description: The zone record id
        explode: false
        in: path
        name: record_id
        required: true
        schema:
          minimum: 1
          type: integer
        style: simple
      responses:
        "204":
          content:
            application/json; version=3:
              schema:
                nullable: true
                type: string
          description: Record removed
        "404":
          content:
            application/json; version=3:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Record not found
      summary: Remove an Intelligent DNS zone record
      tags:
      - Records
    put:
      operationId: putZoneRecord
      parameters:
      - description: The hosted zone id
        explode: false
        in: path
        name: zone_id
        required: true
        schema:
          minimum: 1
          type: integer
        style: simple
      - description: The zone record id
        explode: false
        in: path
        name: record_id
        required: true
        schema:
          minimum: 1
          type: integer
        style: simple
      requestBody:
        content:
          application/json:
            example:
              record_type: A
              entry: site
              description: Site record
              ttl: 3600
              answers_list:
              - 1.2.3.4
              - 5.6.7.8
              - 1.1.2.2
            schema:
              $ref: '#/components/schemas/RecordPostOrPut'
      responses:
        "200":
          content:
            application/json; version=3:
              schema:
                $ref: '#/components/schemas/PostOrPutRecordResponse'
          description: Record updated
        "400":
          content:
            application/json; version=3:
              schema:
                $ref: '#/components/schemas/ErrorsResponse'
          description: Record update error
        "404":
          content:
            application/json; version=3:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Record not found
      summary: Update an Intelligent DNS zone record
      tags:
      - Records
  /intelligent_dns/{zone_id}/dnssec:
    get:
      operationId: getZoneDnsSec
      parameters:
      - description: The hosted zone id
        explode: false
        in: path
        name: zone_id
        required: true
        schema:
          minimum: 1
          type: integer
        style: simple
      responses:
        "200":
          content:
            application/json; version=3:
              schema:
                $ref: '#/components/schemas/GetOrPatchDnsSecResponse'
          description: DNSSEC status retrieved
        "400":
          content:
            application/json; version=3:
              schema:
                $ref: '#/components/schemas/ErrorsResponse'
          description: Error
        "404":
          content:
            application/json; version=3:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Zone not found
        "500":
          content:
            application/json; version=3:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Error
      summary: Retrieve the DNSSEC zone status
      tags:
      - DNSSEC
    patch:
      operationId: putZoneDnsSec
      parameters:
      - description: The hosted zone id
        explode: false
        in: path
        name: zone_id
        required: true
        schema:
          minimum: 1
          type: integer
        style: simple
      requestBody:
        content:
          application/json:
            example:
              is_enabled: true
            schema:
              $ref: '#/components/schemas/DnsSec'
      responses:
        "200":
          content:
            application/json; version=3:
              schema:
                $ref: '#/components/schemas/GetOrPatchDnsSecResponse'
          description: DNSSEC status updated
        "201":
          content:
            application/json; version=3:
              schema:
                $ref: '#/components/schemas/GetOrPatchDnsSecResponse'
          description: Zone updated
        "400":
          content:
            application/json; version=3:
              schema:
                $ref: '#/components/schemas/ErrorsResponse'
          description: Zone update error
        "404":
          content:
            application/json; version=3:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Zone not found
      summary: Update the DNSSEC zone
      tags:
      - DNSSEC
components:
  parameters:
    ZoneId:
      description: The hosted zone id
      explode: false
      in: path
      name: zone_id
      required: true
      schema:
        minimum: 1
        type: integer
      style: simple
    RecordId:
      description: The zone record id
      explode: false
      in: path
      name: record_id
      required: true
      schema:
        minimum: 1
        type: integer
      style: simple
  schemas:
    Zone:
      example:
        is_active: true
        nameservers:
        - nameservers
        - nameservers
        domain: domain
        name: name
        soa_ttl: 7
        refresh: 9
        nx_ttl: 2
        id: 5
        expiry: 3
        retry: 5
      properties:
        id:
          description: Hosted zone id
          type: integer
        name:
          description: Hosted zone name
          type: string
        domain:
          description: Hosted zone domain
          type: string
        is_active:
          description: If hosted zone is active
          type: boolean
        retry:
          nullable: true
          type: integer
        nx_ttl:
          nullable: true
          type: integer
        soa_ttl:
          nullable: true
          type: integer
        refresh:
          nullable: true
          type: integer
        expiry:
          nullable: true
          type: integer
        nameservers:
          description: List of nameservers
          items:
            type: string
          nullable: true
          type: array
      type: object
    GetZonesResponse:
      description: Object returned by get zones
      example:
        schema_version: 0
        count: 6
        links:
          next: next
          previous: previous
        total_pages: 1
        results:
        - is_active: true
          nameservers:
          - nameservers
          - nameservers
          domain: domain
          name: name
          soa_ttl: 7
          refresh: 9
          nx_ttl: 2
          id: 5
          expiry: 3
          retry: 5
        - is_active: true
          nameservers:
          - nameservers
          - nameservers
          domain: domain
          name: name
          soa_ttl: 7
          refresh: 9
          nx_ttl: 2
          id: 5
          expiry: 3
          retry: 5
      properties:
        schema_version:
          description: The schema version
          type: integer
        count:
          description: Number of records
          type: integer
        total_pages:
          description: The total pages
          type: integer
        links:
          $ref: '#/components/schemas/GetZonesResponse_links'
        results:
          description: Hosted zones collection
          items:
            $ref: '#/components/schemas/Zone'
          type: array
      type: object
    GetZoneResponse:
      description: Object returned by get zone
      example:
        schema_version: 0
        results:
          is_active: true
          nameservers:
          - nameservers
          - nameservers
          domain: domain
          name: name
          soa_ttl: 7
          refresh: 9
          nx_ttl: 2
          id: 5
          expiry: 3
          retry: 5
      properties:
        schema_version:
          description: The schema version
          type: integer
        results:
          $ref: '#/components/schemas/Zone'
      type: object
    PostOrPutZoneResponse:
      description: Object returned by create or update zone
      example:
        schema_version: 0
        results:
        - is_active: true
          nameservers:
          - nameservers
          - nameservers
          domain: domain
          name: name
          soa_ttl: 7
          refresh: 9
          nx_ttl: 2
          id: 5
          expiry: 3
          retry: 5
        - is_active: true
          nameservers:
          - nameservers
          - nameservers
          domain: domain
          name: name
          soa_ttl: 7
          refresh: 9
          nx_ttl: 2
          id: 5
          expiry: 3
          retry: 5
      properties:
        schema_version:
          description: The schema version
          type: integer
        results:
          description: The created hosted zone
          items:
            $ref: '#/components/schemas/Zone'
          type: array
      type: object
    RecordGet:
      example:
        record_id: 5
        entry: entry
        answers_list:
        - answers_list
        - answers_list
        description: description
        weight: 2
        ttl: 7
        record_type: record_type
        policy: policy
      properties:
        record_id:
          type: integer
        entry:
          type: string
        description:
          type: string
        answers_list:
          items:
            type: string
          type: array
        policy:
          type: string
        weight:
          type: integer
        record_type:
          type: string
        ttl:
          type: integer
      type: object
    RecordPostOrPut:
      example:
        entry: entry
        answers_list:
        - answers_list
        - answers_list
        description: description
        weight: 1
        id: 6
        ttl: 5
        record_type: record_type
        policy: policy
      properties:
        id:
          type: integer
        entry:
          type: string
        description:
          type: string
        answers_list:
          items:
            type: string
          type: array
        policy:
          type: string
        weight:
          type: integer
        record_type:
          type: string
        ttl:
          type: integer
      type: object
    GetRecordsResponse:
      description: Object returned by get zone record
      example:
        schema_version: 0
        count: 6
        links:
          next: next
          previous: previous
        total_pages: 1
        results:
          zone_domain: zone_domain
          zone_id: 5
          records:
          - record_id: 5
            entry: entry
            answers_list:
            - answers_list
            - answers_list
            description: description
            weight: 2
            ttl: 7
            record_type: record_type
            policy: policy
          - record_id: 5
            entry: entry
            answers_list:
            - answers_list
            - answers_list
            description: description
            weight: 2
            ttl: 7
            record_type: record_type
            policy: policy
      properties:
        schema_version:
          description: The schema version
          type: integer
        count:
          description: Number of records
          type: integer
        total_pages:
          description: The total pages
          type: integer
        links:
          $ref: '#/components/schemas/GetZonesResponse_links'
        results:
          $ref: '#/components/schemas/GetRecordsResponse_results'
      type: object
    PostOrPutRecordResponse:
      description: Object returned by create or update zone record
      example:
        schema_version: 0
        results:
          entry: entry
          answers_list:
          - answers_list
          - answers_list
          description: description
          weight: 1
          id: 6
          ttl: 5
          record_type: record_type
          policy: policy
      properties:
        schema_version:
          description: The schema version
          type: integer
        results:
          $ref: '#/components/schemas/RecordPostOrPut'
      type: object
    DnsSec:
      example:
        is_enabled: true
        delegation_signer:
          key_tag: 9607
          digest_type:
            id: 6
            slug: slug
          algorithm_type:
            id: 6
            slug: slug
          digest: digest
        status: unconfigured
      properties:
        is_enabled:
          type: boolean
        status:
          enum:
          - unconfigured
          - waiting
          - ready
          type: string
        delegation_signer:
          $ref: '#/components/schemas/DnsSec_delegation_signer'
      type: object
    GetOrPatchDnsSecResponse:
      description: Object returned by get zone DNSSEC
      example:
        schema_version: 0
        results:
          is_enabled: true
          delegation_signer:
            key_tag: 9607
            digest_type:
              id: 6
              slug: slug
            algorithm_type:
              id: 6
              slug: slug
            digest: digest
          status: unconfigured
      properties:
        schema_version:
          description: The schema version
          type: integer
        results:
          $ref: '#/components/schemas/DnsSec'
      type: object
    ErrorsResponse:
      properties:
        errors:
          items:
            type: string
          type: array
      type: object
    ErrorResponse:
      properties:
        detail:
          type: string
      type: object
    GetZonesResponse_links:
      example:
        next: next
        previous: previous
      properties:
        previous:
          nullable: true
          type: string
        next:
          nullable: true
          type: string
      type: object
    GetRecordsResponse_results:
      example:
        zone_domain: zone_domain
        zone_id: 5
        records:
        - record_id: 5
          entry: entry
          answers_list:
          - answers_list
          - answers_list
          description: description
          weight: 2
          ttl: 7
          record_type: record_type
          policy: policy
        - record_id: 5
          entry: entry
          answers_list:
          - answers_list
          - answers_list
          description: description
          weight: 2
          ttl: 7
          record_type: record_type
          policy: policy
      properties:
        zone_id:
          type: integer
        zone_domain:
          type: string
        records:
          description: Zone records collection
          items:
            $ref: '#/components/schemas/RecordGet'
          type: array
      type: object
    DnsSec_delegation_signer_digest_type:
      example:
        id: 6
        slug: slug
      properties:
        id:
          type: integer
        slug:
          type: string
      type: object
    DnsSec_delegation_signer:
      example:
        key_tag: 9607
        digest_type:
          id: 6
          slug: slug
        algorithm_type:
          id: 6
          slug: slug
        digest: digest
      properties:
        digest_type:
          $ref: '#/components/schemas/DnsSec_delegation_signer_digest_type'
        algorithm_type:
          $ref: '#/components/schemas/DnsSec_delegation_signer_digest_type'
        digest:
          type: string
        key_tag:
          maximum: 65535
          minimum: 1
          type: integer
      type: object
  securitySchemes:
    tokenAuth:
      description: |
        You must inform a token to auth.
        Usage format: `Token <TOKEN>`
      in: header
      name: Authorization
      type: apiKey
