.. 
.. Copyright 2015 Comcast Cable Communications Management, LLC
.. 
.. Licensed under the Apache License, Version 2.0 (the "License");
.. you may not use this file except in compliance with the License.
.. You may obtain a copy of the License at
.. 
..     http://www.apache.org/licenses/LICENSE-2.0
.. 
.. Unless required by applicable law or agreed to in writing, software
.. distributed under the License is distributed on an "AS IS" BASIS,
.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
.. See the License for the specific language governing permissions and
.. limitations under the License.
.. 

.. _to-api-v12-cdn:

CDN 
===

.. _to-api-v12-cdn-route:

/api/1.2/cdns/health
++++++++++++++++++++

Health
++++++

.. _to-api-v12-cdn-health-route:

**GET /api/1.2/cdns/health.json**

  Authentication Required: Yes
  
  **Response Properties**

  +------------------+--------+-------------------------------------------------+
  |    Parameter     |  Type  |                   Description                   |
  +==================+========+=================================================+
  | ``totalOnline``  | int    | Total number of online caches across all CDNs.  |
  +------------------+--------+-------------------------------------------------+
  | ``totalOffline`` | int    | Total number of offline caches across all CDNs. |
  +------------------+--------+-------------------------------------------------+
  | ``cachegroups``  | array  | A collection of cache groups.                   |
  +------------------+--------+-------------------------------------------------+
  | ``>online``      | int    | The number of online caches for the cache group |
  +------------------+--------+-------------------------------------------------+
  | ``>offline``     | int    | The number of offline caches for the cache      |
  |                  |        | group.                                          |
  +------------------+--------+-------------------------------------------------+
  | ``>name``        | string | Cache group name.                               |
  +------------------+--------+-------------------------------------------------+

  **Response Example** ::

    {
     "response": {
        "totalOnline": 148,
        "totalOffline": 0,
        "cachegroups": [
           {
              "online": 8,
              "offline": 0,
              "name": "us-co-denver"
           },
           {
              "online": 7,
              "offline": 0,
              "name": "us-de-newcastle"
           }
        ]
     },
    }


|

**GET /api/1.2/cdns/:name/health.json**

  Retrieves the health of all locations (cache groups) for a given CDN.

  Authentication Required: Yes
  
  **Request Route Parameters**

  +-----------------+----------+---------------------------------------------------+
  | Name            | Required | Description                                       |
  +=================+==========+===================================================+
  |``name``         | yes      |                                                   |
  +-----------------+----------+---------------------------------------------------+

  **Response Properties**

  +------------------+--------+-------------------------------------------------+
  |    Parameter     |  Type  |                   Description                   |
  +==================+========+=================================================+
  | ``totalOnline``  | int    | Total number of online caches across the        |
  |                  |        | specified CDN.                                  |
  +------------------+--------+-------------------------------------------------+
  | ``totalOffline`` | int    | Total number of offline caches across the       |
  |                  |        | specified CDN.                                  |
  +------------------+--------+-------------------------------------------------+
  | ``cachegroups``  | array  | A collection of cache groups.                   |
  +------------------+--------+-------------------------------------------------+
  | ``>online``      | int    | The number of online caches for the cache group |
  +------------------+--------+-------------------------------------------------+
  | ``>offline``     | int    | The number of offline caches for the cache      |
  |                  |        | group.                                          |
  +------------------+--------+-------------------------------------------------+
  | * ``name``       | string | Cache group name.                               |
  +------------------+--------+-------------------------------------------------+

  **Response Example** ::

    {
     "response": {
        "totalOnline": 148,
        "totalOffline": 0,
        "cachegroups": [
           {
              "online": 8,
              "offline": 0,
              "name": "us-co-denver"
           },
           {
              "online": 7,
              "offline": 0,
              "name": "us-de-newcastle"
           }
        ]
     },
    }

|

**GET /api/1.2/cdns/usage/overview.json**

  Retrieves the high-level CDN usage metrics.

  Authentication Required: Yes
  
  **Response Properties**

  +----------------------+--------+------------------------------------------------+
  | Parameter            | Type   | Description                                    |
  +======================+========+================================================+
  |``currentGbps``       | number |                                                |
  +----------------------+--------+------------------------------------------------+
  |``tps``               | int    |                                                |
  +----------------------+--------+------------------------------------------------+
  |``maxGbps``           | int    |                                                |
  +----------------------+--------+------------------------------------------------+


  **Response Example** ::

    {
     "response": {
        "currentGbps": 149.368167,
        "tps": 36805,
        "maxGbps": 3961
     },
    }


**GET /api/1.2/cdns/capacity.json**

  Retrieves the aggregate capacity percentages of all locations (cache groups) for a given CDN.

  **Response Properties**

  +----------------------+--------+------------------------------------------------+
  | Parameter            | Type   | Description                                    |
  +======================+========+================================================+
  |``availablePercent``  | number |                                                |
  +----------------------+--------+------------------------------------------------+
  |``unavailablePercent``| number |                                                |
  +----------------------+--------+------------------------------------------------+
  |``utilizedPercent``   | number |                                                |
  +----------------------+--------+------------------------------------------------+
  |``maintenancePercent``| number |                                                |
  +----------------------+--------+------------------------------------------------+

  **Response Example** ::

    {
     "response": {
        "availablePercent": 89.0939840205533,
        "unavailablePercent": 0,
        "utilizedPercent": 10.9060020300395,
        "maintenancePercent": 0.0000139494071146245
     },
    }

|

.. _to-api-v12-cdn-routing:

Routing
+++++++

**GET /api/1.2/cdns/routing.json**

  Authentication Required: Yes
  
  Retrieves the aggregate routing percentages of all locations (cache groups) for a given CDN.

  **Response Properties**

  +-----------------+--------+-----------------------------------------+
  |    Parameter    |  Type  |               Description               |
  +=================+========+=========================================+
  | ``staticRoute`` | number | Used pre-configured DNS entries.        |
  +-----------------+--------+-----------------------------------------+
  | ``miss``        | number | No location available for client IP.    |
  +-----------------+--------+-----------------------------------------+
  | ``geo``         | number | Used 3rd party geo-IP mapping.          |
  +-----------------+--------+-----------------------------------------+
  | ``err``         | number | Error localizing client IP.             |
  +-----------------+--------+-----------------------------------------+
  | ``cz``          | number | Used Coverage Zone   geo-IP mapping.    |
  +-----------------+--------+-----------------------------------------+
  | ``dsr``         | number | Overflow traffic sent to secondary CDN. |
  +-----------------+--------+-----------------------------------------+

  **Response Example** ::

   {
     "response": {
        "staticRoute": 0,
        "miss": 0,
        "geo": 37.8855391018869,
        "err": 0,
        "cz": 62.1144608981131,
        "dsr": 0
     },
    }

|

.. _to-api-v12-cdn-metrics:

Metrics
+++++++


**GET /api/1.2/cdns/metric_types/:metric/start_date/:start/end_date/:end.json**

  Authentication Required: Yes
  
  Retrieves edge metrics of one or all locations (cache groups).

  **Request Route Parameters**

  +-----------------+----------+---------------------------+
  |       Name      | Required |        Description        |
  +=================+==========+===========================+
  | ``metric_type`` | yes      | ooff, origin_tps          |
  +-----------------+----------+---------------------------+
  | ``start``       | yes      | UNIX time, yesterday, now |
  +-----------------+----------+---------------------------+
  | ``end``         | yes      | UNIX time, yesterday, now |
  +-----------------+----------+---------------------------+

  **Response Properties**

  +---------------------+--------+-------------+
  |      Parameter      |  Type  | Description |
  +=====================+========+=============+
  | ``stats``           | hash   |             |
  +---------------------+--------+-------------+
  | ``>count``          | string |             |
  +---------------------+--------+-------------+
  | ``>98thPercentile`` | string |             |
  +---------------------+--------+-------------+
  | ``>min``            | string |             |
  +---------------------+--------+-------------+
  | ``>max``            | string |             |
  +---------------------+--------+-------------+
  | ``>5thPercentile``  | string |             |
  +---------------------+--------+-------------+
  | ``>95thPercentile`` | string |             |
  +---------------------+--------+-------------+
  | ``>mean``           | string |             |
  +---------------------+--------+-------------+
  | ``>sum``            | string |             |
  +---------------------+--------+-------------+
  | ``data``            | array  |             |
  +---------------------+--------+-------------+
  | ``>time``           | int    |             |
  +---------------------+--------+-------------+
  | ``>value``          | number |             |
  +---------------------+--------+-------------+
  | ``label``           | string |             |
  +---------------------+--------+-------------+

  **Response Example** ::


    {
     "response": [
        {
           "stats": {
              "count": 1,
              "98thPercentile": 1668.03,
              "min": 1668.03,
              "max": 1668.03,
              "5thPercentile": 1668.03,
              "95thPercentile": 1668.03,
              "mean": 1668.03,
              "sum": 1668.03
           },
           "data": [
              [
                 1425135900000,
                 1668.03
              ],
              [
                 1425136200000,
                 null
              ]
           ],
           "label": "Origin TPS"
        }
     ],
    }

|

.. _to-api-v12-cdn-domains:

Domains
+++++++

**GET /api/1.2/cdns/domains.json**

  Authentication Required: Yes
  
  **Response Properties**

  +----------------------+--------+------------------------------------------------+
  | Parameter            | Type   | Description                                    |
  +======================+========+================================================+
  |``profileId``         | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``parameterId``       | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``profileName``       | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``profileDescription``| string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``domainName``        | string |                                                |
  +----------------------+--------+------------------------------------------------+

  **Response Example** ::

    {
     "response": [
        {
           "profileId": "5",
           "parameterId": "404",
           "profileName": "CR_FOO",
           "profileDescription": "Comcast Content Router for foo.domain.net",
           "domainName": "foo.domain.net"
        },
        {
           "profileId": "8",
           "parameterId": "405",
           "profileName": "CR_BAR",
           "profileDescription": "Comcast Content Router for bar.domain.net",
           "domainName": "bar.domain.net"
        }
     ],
    }

|

.. _to-api-v12-cdn-topology:

Topology
++++++++
**GET /api/1.2/cdns/:cdn_name/configs.json**

  Retrieves CDN config information.

  Authentication Required: Yes
  
  **Request Route Parameters**

  +--------------+----------+-----------------------+
  |     Name     | Required |      Description      |
  +==============+==========+=======================+
  | ``cdn_name`` | yes      | Your cdn name or, all |
  +--------------+----------+-----------------------+

  **Response Properties**

  +-----------------------+--------+-----------------------------------------------+
  | Parameter             | Type   | Description                                   |
  +=======================+========+===============================================+
  |``id``                 | string |                                               |
  +-----------------------+--------+-----------------------------------------------+
  |``value``              | string |                                               |
  +-----------------------+--------+-----------------------------------------------+
  |``name``               | string |                                               |
  +-----------------------+--------+-----------------------------------------------+
  |``config_file``        | string |                                               |
  +-----------------------+--------+-----------------------------------------------+

  **Response Example** ::

    TBD    



|

**GET /api/1.2/cdns/:name/configs/monitoring.json**

  Retrieves CDN monitoring information.

  Authentication Required: Yes
  
  **Request Route Parameters**

  +----------+----------+-------------+
  |   Name   | Required | Description |
  +==========+==========+=============+
  | ``name`` | yes      |             |
  +----------+----------+-------------+

  **Response Properties**

  +-------------------------------------------------+--------+--------------------+
  |                    Parameter                    |  Type  |    Description     |
  +=================================================+========+====================+
  | ``trafficServers``                              | array  | A collection of    |
  |                                                 |        | Traffic Servers.   |
  +-------------------------------------------------+--------+--------------------+
  | ``>profile``                                    | string |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>ip``                                         | string |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>status``                                     | string |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>cacheGroup``                                 | string |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>ip6``                                        | string |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>port``                                       | int    |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>hostName``                                   | string |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>fqdn``                                       | string |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>interfaceName``                              | string |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>type``                                       | string |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>hashId``                                     | string |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``cacheGroups``                                 | array  | A collection of    |
  |                                                 |        | cache groups.      |
  +-------------------------------------------------+--------+--------------------+
  | ``>coordinates``                                | hash   |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>>longitude``                                 | number |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>>latitude``                                  | number |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>name``                                       | string |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``config``                                      | hash   |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>hack.ttl``                                   | int    |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>tm.healthParams.polling.url``                | string |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>tm.dataServer.polling.url``                  | string |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>health.timepad``                             | int    |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>tm.polling.interval``                        | int    |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>health.threadPool``                          | int    |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>health.polling.interval``                    | int    |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>health.event-count``                         | int    |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>tm.crConfig.polling.url``                    | number |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>CDN_name``                                   | number |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``trafficMonitors``                             | array  | A collection of    |
  |                                                 |        | Traffic Monitors.  |
  +-------------------------------------------------+--------+--------------------+
  | ``>profile``                                    | string |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>location``                                   | string |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>ip``                                         | string |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>status``                                     | string |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>ip6``                                        | string |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>port``                                       | int    |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>hostName``                                   | string |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>fqdn``                                       | string |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``deliveryServices``                            | array  | A collection of    |
  |                                                 |        | delivery services. |
  +-------------------------------------------------+--------+--------------------+
  | ``>xmlId``                                      | string |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>totalTpsThreshold``                          | int    |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>status``                                     | string |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>totalKbpsThreshold``                         | int    |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``profiles``                                    | array  | A collection of    |
  |                                                 |        | profiles.          |
  +-------------------------------------------------+--------+--------------------+
  | ``>parameters``                                 | hash   |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>>health.connection.timeout``                 | int    |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>>health.polling.url``                        | string |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>>health.threshold.queryTime``                | int    |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>>history.count``                             | int    |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>>health.threshold.availableBandwidthInKbps`` | string |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>>health.threshold.loadavg``                  | string |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>name``                                       | string |                    |
  +-------------------------------------------------+--------+--------------------+
  | ``>type``                                       | string |                    |
  +-------------------------------------------------+--------+--------------------+

  **Response Example**
  ::

    TBD

  

|

**GET /api/1.2/cdns/:name/configs/routing.json**

  Retrieves CDN routing information.

  Authentication Required: Yes
  
  **Request Route Parameters**

  +----------+----------+-------------+
  |   Name   | Required | Description |
  +==========+==========+=============+
  | ``name`` | yes      |             |
  +----------+----------+-------------+

  **Response Properties**

  +-------------------------------------+---------+-----------------------------------+
  |              Parameter              |   Type  |            Description            |
  +=====================================+=========+===================================+
  | ``trafficServers``                  | array   | A collection of Traffic Servers.  |
  +-------------------------------------+---------+-----------------------------------+
  | ``>profile``                        | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>ip``                             | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>status``                         | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>cacheGroup``                     | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>ip6``                            | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>port``                           | int     |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>deliveryServices``               | array   |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>>xmlId``                         | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>>remaps``                        | array   |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>>hostName``                      | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>fqdn``                           | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>interfaceName``                  | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>type``                           | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>hashId``                         | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``stats``                           | hash    |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>trafficOpsPath``                 | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>cdnName``                        | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>trafficOpsVersion``              | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>trafficOpsUser``                 | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>date``                           | int     |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>trafficOpsHost``                 | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``cacheGroups``                     | array   | A collection of cache groups.     |
  +-------------------------------------+---------+-----------------------------------+
  | ``>coordinates``                    | hash    |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>>longitude``                     | number  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>>latitude``                      | number  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>name``                           | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``config``                          | hash    |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>tld.soa.admin``                  | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>tcoveragezone.polling.interval`` | int     |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>geolocation.polling.interval``   | int     |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>tld.soa.expire``                 | int     |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>coveragezone.polling.url``       | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>tld.soa.minimum``                | int     |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>geolocation.polling.url``        | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>domain_name``                    | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>tld.ttls.AAAA``                  | int     |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>tld.soa.refresh``                | int     |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>tld.ttls.NS``                    | int     |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>tld.ttls.SOA``                   | int     |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>geolocation6.polling.interval``  | int     |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>tld.ttls.A``                     | int     |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>tld.soa.retry``                  | int     |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>geolocation6.polling.url``       | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``trafficMonitors``                 | array   | A collection of Traffic Monitors. |
  +-------------------------------------+---------+-----------------------------------+
  | ``>profile``                        | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>location``                       | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>ip``                             | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>status``                         | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>ip6``                            | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>port``                           | int     |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>hostName``                       | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>fqdn``                           | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``deliveryServices``                | array   | A collection of delivery          |
  |                                     |         | services.                         |
  +-------------------------------------+---------+-----------------------------------+
  | ``>xmlId``                          | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>ttl``                            | int     |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>geoEnabled``                     | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>coverageZoneOnly``               | boolean |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>matchSets``                      | array   |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>>protocol``                      | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>>matchList``                     | array   |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>>>regex``                        | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>>>matchType``                    | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>bypassDestination``              | hash    |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>>maxDnsIpsForLocation``          | int     |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>>ttl``                           | int     |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>>type``                          | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>ttls``                           | hash    |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>>A``                             | int     |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>>SOA``                           | int     |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>>NS``                            | int     |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>>AAAA``                          | int     |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>missCoordinates``                | hash    |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>>longitude``                     | number  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>>latitude``                      | number  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>soa``                            | hash    |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>>admin``                         | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>>retry``                         | int     |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>>minimum``                       | int     |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>>refresh``                       | int     |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>>expire``                        | int     |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``trafficRouters``                  | hash    |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>profile``                        | int     |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>location``                       | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>ip``                             | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>status``                         | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>ip6``                            | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>port``                           | int     |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>hostName``                       | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>fqdn``                           | string  |                                   |
  +-------------------------------------+---------+-----------------------------------+
  | ``>apiPort``                        | int     |                                   |
  +-------------------------------------+---------+-----------------------------------+


**Response Example**

::
  TBD

 
.. _to-api-v12-cdn-dnsseckeys:

DNSSEC Keys
+++++++++++

**GET /api/1.2/cdns/name/:name/dnsseckeys.json**

  Gets a list of dnsseckeys for a CDN and all associated Delivery Services.
  Before returning response to user, check to make sure keys aren't expired.  If they are expired, generate new ones.
  Before returning response to user, make sure DNSSEC keys for all delivery services exist.  If they don't exist, create them.

  Authentication Required: Yes

  Role Required: Admin

  **Request Route Parameters**

  +----------+----------+-------------+
  |   Name   | Required | Description |
  +==========+==========+=============+
  | ``name`` | yes      |             |
  +----------+----------+-------------+

  **Response Properties**

  +-------------------------------+--------+---------------------------------------------------------------+
  |           Parameter           |  Type  |                          Description                          |
  +===============================+========+===============================================================+
  | ``cdn name/ds xml_id``        | string | identifier for ds or cdn                                      |
  +-------------------------------+--------+---------------------------------------------------------------+
  | ``>zsk/ksk``                  | array  | collection of zsk/ksk data                                    |
  +-------------------------------+--------+---------------------------------------------------------------+
  | ``>>ttl``                     | string | time-to-live for dnssec requests                              |
  +-------------------------------+--------+---------------------------------------------------------------+
  | ``>>inceptionDate``           | string | epoch timestamp for when the keys were created                |
  +-------------------------------+--------+---------------------------------------------------------------+
  | ``>>expirationDate``          | string | epoch timestamp representing the expiration of the keys       |
  +-------------------------------+--------+---------------------------------------------------------------+
  | ``>>private``                 | string | encoded private key                                           |
  +-------------------------------+--------+---------------------------------------------------------------+
  | ``>>public``                  | string | encoded public key                                            |
  +-------------------------------+--------+---------------------------------------------------------------+
  | ``>>name``                    | string | domain name                                                   |
  +-------------------------------+--------+---------------------------------------------------------------+
  | ``version``                   | string | API version                                                   |
  +-------------------------------+--------+---------------------------------------------------------------+
  | ``ksk>>dsRecord>>algorithm``  | string | The algorithm of the referenced DNSKEY-recor.                 |
  +-------------------------------+--------+---------------------------------------------------------------+
  | ``ksk>>dsRecord>>digestType`` | string | Cryptographic hash algorithm used to create the Digest value. |
  +-------------------------------+--------+---------------------------------------------------------------+
  | ``ksk>>dsRecord>>digest       | string | A cryptographic hash value of the referenced DNSKEY-record.   |
  +-------------------------------+--------+---------------------------------------------------------------+
  


  **Response Example** ::

    {
      "response": {
        "cdn1": {
          "zsk": {
            "ttl": "60",
            "inceptionDate": "1426196750",
            "private": "zsk private key",
            "public": "zsk public key",
            "expirationDate": "1428788750",
            "name": "foo.kabletown.com."
          },
          "ksk": {
            "name": "foo.kabletown.com.",
            "expirationDate": "1457732750",
            "public": "ksk public key",
            "private": "ksk private key",
            "inceptionDate": "1426196750",
            "ttl": "60",
            dsRecord: {
              "algorithm": "5",
              "digestType": "2",
              "digest": "abc123def456"
            }
          }
        },
        "ds-01": {
          "zsk": {
            "ttl": "60",
            "inceptionDate": "1426196750",
            "private": "zsk private key",
            "public": "zsk public key",
            "expirationDate": "1428788750",
            "name": "ds-01.foo.kabletown.com."
          },
          "ksk": {
            "name": "ds-01.foo.kabletown.com.",
            "expirationDate": "1457732750",
            "public": "ksk public key",
            "private": "ksk private key",
            "inceptionDate": "1426196750"
          }
        },
        ... repeated for each ds in the cdn
      },
    }


|

**GET /api/1.2/cdns/name/:name/dnsseckeys/delete.json**

  Delete dnssec keys for a cdn and all associated delivery services.

  Authentication Required: Yes

  Role Required: Admin

  **Request Route Parameters**

  +----------+----------+----------------------------------------------------------+
  |   Name   | Required |                       Description                        |
  +==========+==========+==========================================================+
  | ``name`` | yes      | name of the CDN for which you want to delete dnssec keys |
  +----------+----------+----------------------------------------------------------+

  **Response Properties**

  +--------------+--------+------------------+
  |  Parameter   |  Type  |   Description    |
  +==============+========+==================+
  | ``response`` | string | success response |
  +--------------+--------+------------------+



  **Response Example**


  ::

    {  
      "response": "Successfully deleted dnssec keys for <cdn>"
    }


|
  
**POST /api/1.2/deliveryservices/dnsseckeys/generate**

  Generates ZSK and KSK keypairs for a CDN and all associated Delivery Services.

  Authentication Required: Yes

  Role Required:  Admin

  **Request Properties**

  +-----------------------+---------+------------------------------------------------+
  |       Parameter       |   Type  |                  Description                   |
  +=======================+=========+================================================+
  | ``key``               | string  | name of the cdn                                |
  +-----------------------+---------+------------------------------------------------+
  | ``name``              | string  | domain name of the cdn                         |
  +-----------------------+---------+------------------------------------------------+
  | ``ttl``               | string  | time to live                                   |
  +-----------------------+---------+------------------------------------------------+
  | ``kskExpirationDays`` | string  | Expiration (in days) for the key signing keys  |
  +-----------------------+---------+------------------------------------------------+
  | ``zskExpirationDays`` | string  | Expiration (in days) for the zone signing keys |
  +-----------------------+---------+------------------------------------------------+

  **Request Example** ::


    {
      "key": "cdn1",
      "name" "ott.kabletown.com",
      "ttl": "60",
      "kskExpirationDays": "365",
      "zskExpirationDays": "90"
    }

  **Response Properties**

  +--------------+--------+-----------------+
  |  Parameter   |  Type  |   Description   |
  +==============+========+=================+
  | ``response`` | string | response string |
  +--------------+--------+-----------------+
  | ``version``  | string | API version     |
  +--------------+--------+-----------------+


  **Response Example** ::


    {  
      "response": "Successfully created dnssec keys for cdn1"
    }

