.. 
.. 
.. 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-users:

Users
=====

.. _to-api-v12-users-route:

/api/1.2/users
++++++++++++++

**GET /api/1.2/users**

  Retrieves all users.

  Authentication Required: Yes

  Role(s) Required: None

  **Request Query Parameters**

  +-----------------+----------+---------------------------------------------------+
  | Name            | Required | Description                                       |
  +=================+==========+===================================================+
  | ``tenant``      | no       | Filter users by tenant ID.                        |
  +-----------------+----------+---------------------------------------------------+

  **Response Properties**

  +----------------------+--------+------------------------------------------------+
  | Parameter            | Type   | Description                                    |
  +======================+========+================================================+
  |``addressLine1``      | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``addressLine2``      | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``city``              | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``company``           | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``country``           | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``email``             | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``fullName``          | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``gid``               | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``id``                | hash   |                                                |
  +----------------------+--------+------------------------------------------------+
  |``lastUpdated``       | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``newUser``           | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``phoneNumber``       | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``postalCode``        | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``publicSshKey``      | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``registrationSent``  | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``role``              | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``roleName``          | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``stateOrProvince``   | string |                                                |
  +----------------------+--------+------------------------------------------------+
  | ``tenant``           | string | Owning tenant name                             |
  +----------------------+--------+------------------------------------------------+
  | ``tenantId``         | int    | Owning tenant ID                               |
  +----------------------+--------+------------------------------------------------+
  |``uid``               | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``username``          | string |                                                |
  +----------------------+--------+------------------------------------------------+

  **Response Example** ::

   {
      "response": [
		 {
			"addressLine1": "",
			"addressLine2": "",
			"city": "",
			"company": "",
			"country": "",
			"email": "email1@email.com",
			"fullName": "Tom Simpson",
			"gid": "0",
			"id": "53",
			"lastUpdated": "2016-01-26 10:22:07",
			"newUser": true,
			"phoneNumber": "",
			"postalCode": "",
			"publicSshKey": "xxx",
			"registrationSent": true,
			"role": "6",
			"rolename": "admin",
			"stateOrProvince": "",
			"tenant": "root",
			"tenantId": 1,
			"uid": "0",
			"username": "tsimpson"
		 },
		 {
		 	... more users
		 },
        ]
    }

|


**GET /api/1.2/users/:id**

  Retrieves user by ID.

  Authentication Required: Yes

  Role(s) Required: None

  **Request Route Parameters**

  +-----------+----------+---------------------------------------------+
  |   Name    | Required |                Description                  |
  +===========+==========+=============================================+
  |   ``id``  |   yes    | User id.                                    |
  +-----------+----------+---------------------------------------------+

  **Response Properties**

  +----------------------+--------+------------------------------------------------+
  | Parameter            | Type   | Description                                    |
  +======================+========+================================================+
  |``addressLine1``      | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``addressLine2``      | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``city``              | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``company``           | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``country``           | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``email``             | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``fullName``          | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``gid``               | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``id``                | hash   |                                                |
  +----------------------+--------+------------------------------------------------+
  |``lastUpdated``       | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``newUser``           | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``phoneNumber``       | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``postalCode``        | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``publicSshKey``      | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``registrationSent``  | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``role``              | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``roleName``          | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``stateOrProvince``   | string |                                                |
  +----------------------+--------+------------------------------------------------+
  | ``tenant``           | string | Owning tenant name                             |
  +----------------------+--------+------------------------------------------------+
  | ``tenantId``         | int    | Owning tenant ID                               |
  +----------------------+--------+------------------------------------------------+
  |``uid``               | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``username``          | string |                                                |
  +----------------------+--------+------------------------------------------------+

  **Response Example** ::

   {
      "response": [
		 {
			"addressLine1": "",
			"addressLine2": "",
			"city": "",
			"company": "",
			"country": "",
			"email": "email1@email.com",
			"fullName": "Tom Simpson",
			"gid": "0",
			"id": "53",
			"lastUpdated": "2016-01-26 10:22:07",
			"newUser": true,
			"phoneNumber": "",
			"postalCode": "",
			"publicSshKey": "xxx",
			"registrationSent": true,
			"role": "6",
			"rolename": "admin",
			"stateOrProvince": "",
			"tenant": "root",
			"tenantId": 1,
			"uid": "0",
			"username": "tsimpson"
		 },
		 {
		 	... more users
		 },
        ]
    }

|


**POST /api/1.2/users**

  Create a user.

  Authentication Required: Yes

  Role(s) Required: admin or oper

  **Request Properties**

  +-------------------------+--------+----------+-------------------------------------------------+
  | Parameter               | Type   | Required | Description                                     |
  +=========================+========+==========+=================================================+
  |``addressLine1``         | string | no       |                                                 |
  +-------------------------+--------+----------+-------------------------------------------------+
  |``addressLine2``         | string | no       |                                                 |
  +-------------------------+--------+----------+-------------------------------------------------+
  |``city``                 | string | no       |                                                 |
  +-------------------------+--------+----------+-------------------------------------------------+
  |``confirmLocalPassword`` | string | yes      |                                                 |
  +-------------------------+--------+----------+-------------------------------------------------+
  |``company``              | string | no       |                                                 |
  +-------------------------+--------+----------+-------------------------------------------------+
  |``country``              | string | no       |                                                 |
  +-------------------------+--------+----------+-------------------------------------------------+
  |``email``                | string | yes      |                                                 |
  +-------------------------+--------+----------+-------------------------------------------------+
  |``fullName``             | string | yes      |                                                 |
  +-------------------------+--------+----------+-------------------------------------------------+
  |``localPassword``        | string | yes      |                                                 |
  +-------------------------+--------+----------+-------------------------------------------------+
  |``newUser``              | bool   | no       |                                                 |
  +-------------------------+--------+----------+-------------------------------------------------+
  |``phoneNumber``          | string | no       |                                                 |
  +-------------------------+--------+----------+-------------------------------------------------+
  |``postalCode``           | string | no       |                                                 |
  +-------------------------+--------+----------+-------------------------------------------------+
  |``publicSshKey``         | string | no       |                                                 |
  +-------------------------+--------+----------+-------------------------------------------------+
  |``role``                 | int    | yes      |                                                 |
  +-------------------------+--------+----------+-------------------------------------------------+
  |``stateOrProvince``      | string | no       |                                                 |
  +-------------------------+--------+----------+-------------------------------------------------+
  | ``tenantId``            | int    | no       | Owning tenant ID                                |
  +-------------------------+--------+----------+-------------------------------------------------+
  |``username``             | string | yes      |                                                 |
  +-------------------------+--------+----------+-------------------------------------------------+


  **Request Example** ::
  
    {   
        "username": "tsimpson"
        "tenantId": 1,
        "fullName": "Tom Simpson"
        "email": "email1@email.com"
        "role": 6
        "localPassword": "password"
        "confirmLocalPassword": "password"
    }

|

  **Response Properties**

  +----------------------+--------+------------------------------------------------+
  | Parameter            | Type   | Description                                    |
  +======================+========+================================================+
  |``addressLine1``      | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``addressLine2``      | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``city``              | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``company``           | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``country``           | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``email``             | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``fullName``          | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``gid``               | int    |                                                |
  +----------------------+--------+------------------------------------------------+
  |``id``                | int    |                                                |
  +----------------------+--------+------------------------------------------------+
  |``lastUpdated``       | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``newUser``           | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``phoneNumber``       | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``postalCode``        | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``publicSshKey``      | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``registrationSent``  | bool   |                                                |
  +----------------------+--------+------------------------------------------------+
  |``role``              | int    |                                                |
  +----------------------+--------+------------------------------------------------+
  |``roleName``          | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``stateOrProvince``   | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``uid``               | int    |                                                |
  +----------------------+--------+------------------------------------------------+
  | ``tenantId``         | int    | Owning tenant ID                               |
  +----------------------+--------+------------------------------------------------+
  |``username``          | string |                                                |
  +----------------------+--------+------------------------------------------------+

  **Response Example** ::
  
    {"alerts": [
             {
                 "level":"success",
                 "text":"User creation was successful."
             }
         ],
     "response: {
             "addressLine1":"",
             "addressLine2":"",
             "city":"",
             "company":"",
             "country":"",
             "email":"email1@email.com",
             "fullName":"Tom Simpson",
             "gid":0,
             "id":2,
             "lastUpdated":null,
             "newUser":false,
             "phoneNumber":"",
             "postalCode":"",
             "publicSshKey":"",
             "registrationSent":false,
             "role":6,
             "roleName":"portal",
             "stateOrProvince":"",
	     "tenantId": 1,
             "uid":0,
             "username":"tsimpson",
         }
   }

|


**POST /api/1.2/users/register**

  Register a user and send registration email.

  Authentication Required: Yes

  Role(s) Required: Admin or Operations

  **Request Properties**

  +-------------------------+--------+----------+-------------------------------------------------+
  | Parameter               | Type   | Required | Description                                     |
  +=========================+========+==========+=================================================+
  |``email``                | string | yes      | Email address of the new user.                  |
  +-------------------------+--------+----------+-------------------------------------------------+
  |``role``                 |  int   | yes      | Role ID of the new user.                        |
  +-------------------------+--------+----------+-------------------------------------------------+
  |``tenantId``             |  int   | yes      | Tenant ID of the new user.                      |
  +-------------------------+--------+----------+-------------------------------------------------+


  **Request Example** ::

    {
        "email": "foo@bar.com"
        "role": 1,
        "tenantId": "1"
    }

|

  **Response Example** ::

    {
    	"alerts": [
             {
                 "level":"success",
                 "text":"Sent user registration to foo@bar.com with the following permissions [ role: admin | tenant: root ]"
             }
         ]
     }

|

**GET /api/1.2/users/:id/deliveryservices**

  Retrieves all delivery services assigned to the user. See also `Using Traffic Ops - Delivery Service <http://trafficcontrol.apache.org/docs/latest/admin/traffic_ops_using.html#delivery-service>`_.

  Authentication Required: Yes

  Role(s) Required: None

  **Request Route Parameters**

  +-----------------+----------+---------------------------------------------------+
  | Name            | Required | Description                                       |
  +=================+==========+===================================================+
  | ``id``          | yes      | User ID.                                          |
  +-----------------+----------+---------------------------------------------------+


  **Response Properties**

  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  |        Parameter         |  Type  |                                                             Description                                                              |
  +==========================+========+======================================================================================================================================+
  | ``active``               |  bool  | true if active, false if inactive.                                                                                                   |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``cacheurl``             | string | Cache URL rule to apply to this delivery service.                                                                                    |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``ccrDnsTtl``            | string | The TTL of the DNS response for A or AAAA queries requesting the IP address of the tr. host.                                         |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``cdnId``                | string | Id of the CDN to which the delivery service belongs to.                                                                              |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``cdnName``              | string | Name of the CDN to which the delivery service belongs to.                                                                            |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``checkPath``            | string | The path portion of the URL to check this deliveryservice for health.                                                                |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``deepCachingType``      | string | When to do Deep Caching for this Delivery Service:                                                                                   |
  |                          |        |                                                                                                                                      |
  |                          |        | - NEVER (default)                                                                                                                    |
  |                          |        | - ALWAYS                                                                                                                             |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``displayName``          | string | The display name of the delivery service.                                                                                            |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``dnsBypassIp``          | string | The IPv4 IP to use for bypass on a DNS deliveryservice  - bypass starts when serving more than the                                   |
  |                          |        | globalMaxMbps traffic on this deliveryservice.                                                                                       |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``dnsBypassIp6``         | string | The IPv6 IP to use for bypass on a DNS deliveryservice - bypass starts when serving more than the                                    |
  |                          |        | globalMaxMbps traffic on this deliveryservice.                                                                                       |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``dnsBypassTtl``         | string | The TTL of the DNS bypass response.                                                                                                  |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``dscp``                 | string | The Differentiated Services Code Point (DSCP) with which to mark downstream (EDGE ->  customer) traffic.                             |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``edgeHeaderRewrite``    | string | The EDGE header rewrite actions to perform.                                                                                          |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``geoLimitRedirectUrl``  | string |                                                                                                                                      |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``geoLimit``             | string | - 0: None - no limitations                                                                                                           |
  |                          |        | - 1: Only route on CZF file hit                                                                                                      |
  |                          |        | - 2: Only route on CZF hit or when from USA                                                                                          |
  |                          |        |                                                                                                                                      |
  |                          |        | Note that this does not prevent access to content or makes content secure; it just prevents                                          |
  |                          |        | routing to the content by Traffic Router.                                                                                            |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``geoLimitCountries``    | string |                                                                                                                                      |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``geoProvider``          | string |                                                                                                                                      |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``globalMaxMbps``        | string | The maximum global bandwidth allowed on this deliveryservice. If exceeded, the traffic routes to the                                 |
  |                          |        | dnsByPassIp* for DNS deliveryservices and to the httpBypassFqdn for HTTP deliveryservices.                                           |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``globalMaxTps``         | string | The maximum global transactions per second allowed on this deliveryservice. When this is exceeded                                    |
  |                          |        | traffic will be sent to the dnsByPassIp* for DNS deliveryservices and to the httpBypassFqdn for                                      |
  |                          |        | HTTP deliveryservices                                                                                                                |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``httpBypassFqdn``       | string | The HTTP destination to use for bypass on an HTTP deliveryservice - bypass starts when serving more than the                         |
  |                          |        | globalMaxMbps traffic on this deliveryservice.                                                                                       |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``id``                   | string | The deliveryservice id (database row number).                                                                                        |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``infoUrl``              | string | Use this to add a URL that points to more information about that deliveryservice.                                                    |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``initialDispersion``    | string |                                                                                                                                      |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``ipv6RoutingEnabled``   |  bool  | false: send IPv4 address of Traffic Router to client on HTTP type del.                                                               |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``lastUpdated``          | string |                                                                                                                                      |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``logsEnabled``          |  bool  |                                                                                                                                      |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``longDesc``             | string | Description field 1.                                                                                                                 |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``longDesc1``            | string | Description field 2.                                                                                                                 |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``longDesc2``            | string | Description field 2.                                                                                                                 |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``>>type``               | string | The type of MatchList (one of :ref:to-api-v11-types use_in_table='regex').                                                           |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``>>setNumber``          | string | The set Number of the matchList.                                                                                                     |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``>>pattern``            | string | The regexp for the matchList.                                                                                                        |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``maxDnsAnswers``        | string | The maximum number of IPs to put in a A/AAAA response for a DNS deliveryservice (0 means all                                         |
  |                          |        | available).                                                                                                                          |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``midHeaderRewrite``     | string | The MID header rewrite actions to perform.                                                                                           |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``missLat``              | string | The latitude to use when the client cannot be found in the CZF or the Geo lookup.                                                    |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``missLong``             | string | The longitude to use when the client cannot be found in the CZF or the Geo lookup.                                                   |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``multiSiteOrigin``      |  bool  | Is the Multi Site Origin feature enabled for this delivery service (0=false, 1=true). See :ref:`rl-multi-site-origin`                |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``multiSiteOriginAlgor`` |  bool  | Is the Multi Site Origin feature enabled for this delivery service (0=false, 1=true). See :ref:`rl-multi-site-origin`                |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``orgServerFqdn``        | string | The origin server base URL (FQDN when used in this instance, includes the                                                            |
  |                          |        | protocol (http:// or https://) for use in retrieving content from the origin server.                                                 |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``originShield``         | string |                                                                                                                                      |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``profileDescription``   | string | The description of the Traffic Router Profile with which this deliveryservice is associated.                                         |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``profileId``            | string | The id of the Traffic Router Profile with which this deliveryservice is associated.                                                  |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``profileName``          | string | The name of the Traffic Router Profile with which this deliveryservice is associated.                                                |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``protocol``             | string | - 0: serve with http:// at EDGE                                                                                                      |
  |                          |        | - 1: serve with https:// at EDGE                                                                                                     |
  |                          |        | - 2: serve with both http:// and https:// at EDGE                                                                                    |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``qstringIgnore``        | string | - 0: no special query string handling; it is for use in the cache-key and pass up to origin.                                         |
  |                          |        | - 1: ignore query string in cache-key, but pass it up to parent and or origin.                                                       |
  |                          |        | - 2: drop query string at edge, and do not use it in the cache-key.                                                                  |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``rangeRequestHandling`` | string | How to treat range requests:                                                                                                         |
  |                          |        |                                                                                                                                      |
  |                          |        | - 0 Do not cache (ranges requested from files taht are already cached due to a non range request will be a HIT)                      |
  |                          |        | - 1 Use the `background_fetch <https://docs.trafficserver.apache.org/en/latest/reference/plugins/background_fetch.en.html>`_ plugin. |
  |                          |        | - 2 Use the cache_range_requests plugin.                                                                                             |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``regexRemap``           | string | Regex Remap rule to apply to this delivery service at the Edge tier.                                                                 |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``regionalGeoBlocking``  |  bool  | Regex Remap rule to apply to this delivery service at the Edge tier.                                                                 |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``remapText``            | string | Additional raw remap line text.                                                                                                      |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``routingName``          | string | The routing name of this deliveryservice.                                                                                            |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``signed``               |  bool  | - false: token based auth (see :ref:token-based-auth) is not enabled for this deliveryservice.                                       |
  |                          |        | - true: token based auth is enabled for this deliveryservice.                                                                        |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``sslKeyVersion``        | string |                                                                                                                                      |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``tenant``               | string | Owning tenant name                                                                                                                   |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``tenantId``             | int    | Owning tenant ID.                                                                                                                    |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``trRequestHeaders``     | string | List of header keys separated by ``__RETURN__``. Listed headers will be included in TR access log entries under the "rh=" token.     |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``trResponseHeaders``    | string | List of header ``name:value`` pairs separated by ``__RETURN__``. Listed pairs will be included in all TR HTTP responses.             |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``type``                 | string | The type of this deliveryservice (one of :ref:to-api-v11-types use_in_table='deliveryservice').                                      |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``typeId``               | string | The type of this deliveryservice (one of :ref:to-api-v11-types use_in_table='deliveryservice').                                      |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+
  | ``xmlId``                | string | Unique string that describes this deliveryservice.                                                                                   |
  +--------------------------+--------+--------------------------------------------------------------------------------------------------------------------------------------+

  **Response Example** ::

    {
      "response": [
        {
            "active": true,
            "cacheurl": null,
            "ccrDnsTtl": "3600",
            "cdnId": "2",
            "cdnName": "over-the-top",
            "checkPath": "",
            "deepCachingType": "NEVER",
            "displayName": "My Cool Delivery Service",
            "dnsBypassCname": "",
            "dnsBypassIp": "",
            "dnsBypassIp6": "",
            "dnsBypassTtl": "30",
            "dscp": "40",
            "edgeHeaderRewrite": null,
            "exampleURLs": [
                "http://foo.foo-ds.foo.bar.net"
            ],
            "geoLimit": "0",
            "geoLimitCountries": null,
            "geoLimitRedirectURL": null,
            "geoProvider": "0",
            "globalMaxMbps": null,
            "globalMaxTps": "0",
            "httpBypassFqdn": "",
            "id": "442",
            "infoUrl": "",
            "initialDispersion": "1",
            "ipv6RoutingEnabled": true,
            "lastUpdated": "2016-01-26 08:49:35",
            "logsEnabled": false,
            "longDesc": "",
            "longDesc1": "",
            "longDesc2": "",
            "matchList": [
                {
                    "pattern": ".*\\.foo-ds\\..*",
                    "setNumber": "0",
                    "type": "HOST_REGEXP"
                }
            ],
            "maxDnsAnswers": "0",
            "midHeaderRewrite": null,
            "missLat": "41.881944",
            "missLong": "-87.627778",
            "multiSiteOrigin": false,
            "multiSiteOriginAlgorithm": null,
            "orgServerFqdn": "http://baz.boo.net",
            "originShield": null,
            "profileDescription": "Content Router for over-the-top",
            "profileId": "5",
            "profileName": "ROUTER_TOP",
            "protocol": "0",
            "qstringIgnore": "1",
            "rangeRequestHandling": "0",
            "regexRemap": null,
            "regionalGeoBlocking": false,
            "remapText": null,
            "routingName": "foo",
            "signed": false,
            "sslKeyVersion": "0",
            "tenant": "root",
            "tenantId": 1,
            "trRequestHeaders": null,
            "trResponseHeaders": "Access-Control-Allow-Origin: *",
            "type": "HTTP",
            "typeId": "8",
            "xmlId": "foo-ds"
        }
        { .. },
        { .. }
      ]
    }

|


**GET /api/1.2/user/current**

  Retrieves the profile for the authenticated user.

  Authentication Required: Yes

  Role(s) Required: None

  **Response Properties**

  +----------------------+---------+------------------------------------------------+
  | Parameter            | Type    | Description                                    |
  +======================+=========+================================================+
  |``email``             | string  |                                                |
  +----------------------+---------+------------------------------------------------+
  |``city``              | string  |                                                |
  +----------------------+---------+------------------------------------------------+
  |``id``                | string  |                                                |
  +----------------------+---------+------------------------------------------------+
  |``phoneNumber``       | string  |                                                |
  +----------------------+---------+------------------------------------------------+
  |``company``           | string  |                                                |
  +----------------------+---------+------------------------------------------------+
  |``country``           | string  |                                                |
  +----------------------+---------+------------------------------------------------+
  |``fullName``          | string  |                                                |
  +----------------------+---------+------------------------------------------------+
  |``localUser``         | boolean |                                                |
  +----------------------+---------+------------------------------------------------+
  |``uid``               | string  |                                                |
  +----------------------+---------+------------------------------------------------+
  |``stateOrProvince``   | string  |                                                |
  +----------------------+---------+------------------------------------------------+
  |``username``          | string  |                                                |
  +----------------------+---------+------------------------------------------------+
  |``newUser``           | boolean |                                                |
  +----------------------+---------+------------------------------------------------+
  |``addressLine2``      | string  |                                                |
  +----------------------+---------+------------------------------------------------+
  |``role``              | string  |                                                |
  +----------------------+---------+------------------------------------------------+
  |``addressLine1``      | string  |                                                |
  +----------------------+---------+------------------------------------------------+
  |``gid``               | string  |                                                |
  +----------------------+---------+------------------------------------------------+
  |``postalCode``        | string  |                                                |
  +----------------------+---------+------------------------------------------------+
  | ``tenant``           | string  | Owning tenant name                             |
  +----------------------+---------+------------------------------------------------+
  | ``tenantId``         | int     | Owning tenant ID                               |
  +----------------------+---------+------------------------------------------------+

  **Response Example** ::

    {
           "response": {
                            "email": "email@email.com",
                            "city": "",
                            "id": "50",
                            "phoneNumber": "",
                            "company": "",
                            "country": "",
                            "fullName": "Tom Callahan",
                            "localUser": true,
                            "uid": "0",
                            "stateOrProvince": "",
                            "username": "tommyboy",
                            "newUser": false,
                            "addressLine2": "",
                            "role": "6",
                            "addressLine1": "",
                            "gid": "0",
                            "postalCode": "",
                            "tenant": "root",
                            "tenantId": 1

           },
    }

|
  
**PUT /api/1.2/user/current**

  Updates the date for the authenticated user.

  Authentication Required: Yes

  Role(s) Required: None

  **Request Properties**

  +----------------------+---------+------------------------------------------------+
  | Parameter            | Type    | Description                                    |
  +======================+=========+================================================+
  |``email``             | string  |                                                |
  +----------------------+---------+------------------------------------------------+
  |``city``              | string  |                                                |
  +----------------------+---------+------------------------------------------------+
  |``id``                | string  |                                                |
  +----------------------+---------+------------------------------------------------+
  |``phoneNumber``       | string  |                                                |
  +----------------------+---------+------------------------------------------------+
  |``company``           | string  |                                                |
  +----------------------+---------+------------------------------------------------+
  |``country``           | string  |                                                |
  +----------------------+---------+------------------------------------------------+
  |``fullName``          | string  |                                                |
  +----------------------+---------+------------------------------------------------+
  |``localUser``         | boolean |                                                |
  +----------------------+---------+------------------------------------------------+
  |``uid``               | string  |                                                |
  +----------------------+---------+------------------------------------------------+
  |``stateOrProvince``   | string  |                                                |
  +----------------------+---------+------------------------------------------------+
  |``username``          | string  |                                                |
  +----------------------+---------+------------------------------------------------+
  |``newUser``           | boolean |                                                |
  +----------------------+---------+------------------------------------------------+
  |``addressLine2``      | string  |                                                |
  +----------------------+---------+------------------------------------------------+
  |``role``              | string  |                                                |
  +----------------------+---------+------------------------------------------------+
  |``addressLine1``      | string  |                                                |
  +----------------------+---------+------------------------------------------------+
  |``gid``               | string  |                                                |
  +----------------------+---------+------------------------------------------------+
  |``postalCode``        | string  |                                                |
  +----------------------+---------+------------------------------------------------+
  | ``tenantId``         | int     | Owning tenant ID                               |
  +----------------------+---------+------------------------------------------------+

  **Request Example** ::

    {
     "user": {
        "email": "",
        "city": "",
        "id": "",
        "phoneNumber": "",
        "company": "",
        "country": "",
        "fullName": "",
        "localUser": true,
        "uid": "0",
        "stateOrProvince": "",
        "username": "tommyboy",
        "newUser": false,
        "addressLine2": "",
        "role": "6",
        "addressLine1": "",
        "gid": "0",
        "postalCode": "",
        "tenant": "root",
        "tenantId": 1,

     }
    }

|

  **Response Properties**

  +-------------+--------+----------------------------------+
  |  Parameter  |  Type  |           Description            |
  +=============+========+==================================+
  | ``alerts``  | array  | A collection of alert messages.  |
  +-------------+--------+----------------------------------+
  | ``>level``  | string | Success, info, warning or error. |
  +-------------+--------+----------------------------------+
  | ``>text``   | string | Alert message.                   |
  +-------------+--------+----------------------------------+
  | ``version`` | string |                                  |
  +-------------+--------+----------------------------------+

  **Response Example** ::

    {
          "alerts": [
                    {
                            "level": "success",
                            "text": "UserProfile was successfully updated."
                    }
            ],
    }

|

**GET /api/1.2/user/current/jobs.json**

  Retrieves the user's list of jobs.

  Authentication Required: Yes

  Role(s) Required: None

  **Request Query Parameters**

  +--------------+----------+----------------------------------------+
  |    Name      | Required |              Description               |
  +==============+==========+========================================+
  | ``keyword``  | no       | PURGE                                  |
  +--------------+----------+----------------------------------------+

  **Response Properties**

  +----------------------+--------+------------------------------------------------+
  | Parameter            | Type   | Description                                    |
  +======================+========+================================================+
  |``keyword``           | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``objectName``        | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``assetUrl``          | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``assetType``         | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``status``            | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``dsId``              | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``dsXmlId``           | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``username``          | boolean|                                                |
  +----------------------+--------+------------------------------------------------+
  |``parameters``        | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``enteredTime``       | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``objectType``        | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``agent``             | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``id``                | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``startTime``         | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``version``           | string |                                                |
  +----------------------+--------+------------------------------------------------+

  **Response Example**
  ::

    {
     "response": [
        {
           "id": "1",
           "keyword": "PURGE",
           "objectName": null,
           "assetUrl": "",
           "assetType": "file",
           "status": "PENDING",
           "dsId": "9999",
           "dsXmlId": "ds-xml-id",
           "username": "peewee",
           "parameters": "TTL:56h",
           "enteredTime": "2015-01-21 18:00:16",
           "objectType": null,
           "agent": "",
           "startTime": "2015-01-21 10:45:38"
        }
     ],
    }

|

**POST/api/1.2/user/current/jobs**

Invalidating content on the CDN is sometimes necessary when the origin was mis-configured and something is cached in the CDN that needs to be removed. Given the size of a typical Traffic Control CDN and the amount of content that can be cached in it, removing the content from all the caches may take a long time. To speed up content invalidation, Traffic Ops will not try to remove the content from the caches, but it makes the content inaccessible using the *regex_revalidate* ATS plugin. This forces a *revalidation* of the content, rather than a new get.

.. Note:: This method forces a HTTP *revalidation* of the content, and not a new *GET* - the origin needs to support revalidation according to the HTTP/1.2 specification, and send a ``200 OK`` or ``304 Not Modified`` as applicable.

Authentication Required: Yes

Role(s) Required: None

  **Request Properties**

  +----------------------+--------+------------------------------------------------+
  | Parameter            | Type   | Description                                    |
  +======================+========+================================================+
  |``dsId``              | string | Unique Delivery Service ID                     |
  +----------------------+--------+------------------------------------------------+
  |``regex``             | string | Path Regex this should be a                    |
  |                      |        | `PCRE <http://www.pcre.org/>`_ compatible      |
  |                      |        | regular expression for the path to match for   |
  |                      |        | forcing the revalidation. Be careful to only   |
  |                      |        | match on the content you need to remove -      |
  |                      |        | revalidation is an expensive operation for     |
  |                      |        | many origins, and a simple ``/.*`` can cause   |
  |                      |        | an overload condition of the origin.           |
  +----------------------+--------+------------------------------------------------+
  |``startTime``         | string | Start Time is the time when the revalidation   |
  |                      |        | rule will be made active. Populate             |
  |                      |        | with the current time to schedule ASAP. This   |
  |                      |        | value cannot be more than 2 days before now.   |
  +----------------------+--------+------------------------------------------------+
  |``ttl``               | int    | Time To Live is how long the revalidation rule |
  |                      |        | will be active for in hours. It usually makes  |
  |                      |        | sense to make this the same as the             |
  |                      |        | ``Cache-Control`` header from the origin which |
  |                      |        | sets the object time to live in cache          |
  |                      |        | (by ``max-age`` or ``Expires``). Entering a    |
  |                      |        | longer TTL here will make the caches do        |
  |                      |        | unnecessary work.                              |
  +----------------------+--------+------------------------------------------------+

  **Request Example** ::

    {
           "dsId": "9999",
           "regex": "/path/to/content.jpg",
           "startTime": "2015-01-27 11:08:37",
           "ttl": 54
    }

|

  **Response Properties**

  +-------------+--------+----------------------------------+
  |  Parameter  |  Type  |           Description            |
  +=============+========+==================================+
  | ``alerts``  | array  | A collection of alert messages.  |
  +-------------+--------+----------------------------------+
  | ``>level``  | string | Success, info, warning or error. |
  +-------------+--------+----------------------------------+
  | ``>text``   | string | Alert message.                   |
  +-------------+--------+----------------------------------+
  | ``version`` | string |                                  |
  +-------------+--------+----------------------------------+

  **Response Example** ::

    {
          "alerts":
                  [
                      { 
                            "level": "success",
                            "text": "Successfully created purge job for: ."
                      }
                  ],
    }


|

**POST /api/1.2/user/login**

  Authentication of a user using username and password. Traffic Ops will send back a session cookie.

  Authentication Required: No

  Role(s) Required: None

  **Request Properties**

  +----------------------+--------+------------------------------------------------+
  | Parameter            | Type   | Description                                    |
  +======================+========+================================================+
  |``u``                 | string | username                                       |
  +----------------------+--------+------------------------------------------------+
  |``p``                 | string | password                                       |
  +----------------------+--------+------------------------------------------------+

  **Request Example** ::

    {
       "u": "username",
       "p": "password"
    }

|

  **Response Properties**

  +-------------+--------+----------------------------------+
  |  Parameter  |  Type  |           Description            |
  +=============+========+==================================+
  | ``alerts``  | array  | A collection of alert messages.  |
  +-------------+--------+----------------------------------+
  | ``>level``  | string | Success, info, warning or error. |
  +-------------+--------+----------------------------------+
  | ``>text``   | string | Alert message.                   |
  +-------------+--------+----------------------------------+
  | ``version`` | string |                                  |
  +-------------+--------+----------------------------------+

  **Response Example** ::

   {
     "alerts": [
        {
           "level": "success",
           "text": "Successfully logged in."
        }
     ],
    }

|

**GET /api/1.2/user/:id/deliveryservices/available**

  Authentication Required: Yes

  Role(s) Required: None

  **Request Route Parameters**

  +-----------------+----------+---------------------------------------------------+
  | Name            | Required | Description                                       |
  +=================+==========+===================================================+
  |id               | yes      |                                                   |
  +-----------------+----------+---------------------------------------------------+

  **Response Properties**

  +----------------------+--------+------------------------------------------------+
  | Parameter            | Type   | Description                                    |
  +======================+========+================================================+
  |``id``                | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``displayName``       | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``xmlId``             | string |                                                |
  +----------------------+--------+------------------------------------------------+

  **Response Example** ::


    {
     "response": [
        {
           "id": "90",
           "displayName": "Foo Bar DS",
           "xmlId": "foo-bar"
        },
        {
           "id": "92",
           "displayName": "Foo Baz DS",
           "xmlId": "foo-baz"
        }
     ],
    }

|

**POST /api/1.2/user/login/token**

  Authentication of a user using a token.

  Authentication Required: No

  Role(s) Required: None

  **Request Properties**

  +----------------------+--------+------------------------------------------------+
  | Parameter            | Type   | Description                                    |
  +======================+========+================================================+
  |``t``                 | string | token-value                                    |
  +----------------------+--------+------------------------------------------------+

  **Request Example** ::

    {
       "t": "token-value"
    }

|

  **Response Properties**

  +-------------+--------+-------------+
  |  Parameter  |  Type  | Description |
  +=============+========+=============+
  | ``alerts``  | array  |             |
  +-------------+--------+-------------+
  | ``>level``  | string |             |
  +-------------+--------+-------------+
  | ``>text``   | string |             |
  +-------------+--------+-------------+
  | ``version`` | string |             |
  +-------------+--------+-------------+

  **Response Example** ::

    {
     "alerts": [
        {
           "level": "error",
           "text": "Unauthorized, please log in."
        }
     ],
    }


|


**POST /api/1.2/user/logout**

  User logout. Invalidates the session cookie.

  Authentication Required: Yes

  Role(s) Required: None

  **Response Properties**

  +----------------------+--------+------------------------------------------------+
  | Parameter            | Type   | Description                                    |
  +======================+========+================================================+
  |``alerts``            | array  |                                                |
  +----------------------+--------+------------------------------------------------+
  |* ``level``           | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |* ``text``            | string |                                                |
  +----------------------+--------+------------------------------------------------+
  |``version``           | string |                                                |
  +----------------------+--------+------------------------------------------------+

  **Response Example**
  ::

    {
     "alerts": [
        {
           "level": "success",
           "text": "You are logged out."
        }
     ],
    }


|

**POST /api/1.2/user/reset_password**

  Reset user password.

  Authentication Required: No

  Role(s) Required: None

  **Request Properties**

  +----------------------+--------+------------------------------------------------+
  | Parameter            | Type   | Description                                    |
  +======================+========+================================================+
  |``email``             | string | The email address of the user to initiate      |
  |                      |        | password reset.                                |
  +----------------------+--------+------------------------------------------------+

  **Request Example**
  ::

    {
     "email": "email@email.com"
    }

|

  **Response Properties**

  +----------------------+--------+------------------------------------------------+
  | Parameter            | Type   | Description                                    |
  +======================+========+================================================+
  |``alerts``            | array  | A collection of alert messages.                |
  +----------------------+--------+------------------------------------------------+
  |* ``level``           | string | Success, info, warning or error.               |
  +----------------------+--------+------------------------------------------------+
  |* ``text``            | string | Alert message.                                 |
  +----------------------+--------+------------------------------------------------+
  |``version``           | string |                                                |
  +----------------------+--------+------------------------------------------------+

  **Response Example** ::

    {
     "alerts": [
        {
           "level": "success",
           "text": "Successfully sent password reset to email 'email@email.com'"
        }
     ],
    }

|
  
