Octavia API
===========

Authentication
--------------

Using the version 1 API
-----------------------

For the purpose of examples, assume there is an Octavia API server running
at the URL ``http://octavia.example.com`` on the default port 80.

Note: Requests to update any resource on a load balancer in an immutable state
will fail with a response code ``409``.

Available Statuses on Entities
------------------------------

+---------------------+--------------------------------+
| Status type         | Statuses                       |
+---------------------+--------------------------------+
| Operating Status    | ``ONLINE``, ``OFFLINE``,       |
|                     | ``DEGRADED``, ``ERROR``,       |
|                     | ``NO_MONITOR``                 |
+---------------------+--------------------------------+
| Provisioning Status | ``ACTIVE``, ``DELETED``,       |
|                     | ``ERROR``, ``PENDING_DELETE``, |
|                     | ``PENDING_UPDATE``,            |
|                     | ``PENDING_CREATE``             |
+---------------------+--------------------------------+

Response Codes
--------------

- ``200`` - The synchronous request was successful

- ``202`` - The asynchronous request was accepted and is being processed

- ``400`` - The request could not be understood

  - Example:  Malformed JSON in request body

- ``401`` - Unauthorized: Access is denied due to invalid credentials

- ``403`` - The project is over quota for the request

- ``404`` - The requested resource does not exist

- ``409`` - The request has a conflict with existing resources

  - Example:  Protocol for ``listener`` does not match protocol on ``pool``

- ``500`` - The request encountered an unexpected failure

- ``503`` - The project is busy with other requests, try again later

Load Balancers
--------------

+-----------------------------------------------------------------------+
| **Fully Populated Load Balancer Object**                              |
+---------------------+------------+------------------------------------+
| Parameters          | Type       | Description                        |
+=====================+============+====================================+
| id                  | UUID       | Load Balancer ID                   |
+---------------------+------------+------------------------------------+
| vip                 | VIP Object | JSON VIP object below              |
+---------------------+------------+------------------------------------+
| project_id          | UUID       | ``UUID`` for project               |
+---------------------+------------+------------------------------------+
| name                | String     | String for load balancer name      |
+---------------------+------------+------------------------------------+
| description         | String     | String detailing information \     |
|                     |            | about the load balancer            |
+---------------------+------------+------------------------------------+
| enabled             | Boolean    | Whether or not the load \          |
|                     |            | balancer should be online \        |
|                     |            | immediately                        |
+---------------------+------------+------------------------------------+
| operating_status    | String     | Network status of a load balancer  |
+---------------------+------------+------------------------------------+
| provisioning_status | String     | Physical status of a load balancer |
+---------------------+------------+------------------------------------+

Virtual IP
**********
The following table lists the attributes of a VIP.  If only port_id is
provided then the network_id will be populated.  If only network_id is
provided then a port will be created and the port_id will be returned.
If an ip_address is provided then that IP will be attempted to be
assigned to the VIP as long as port_id or network_id is provided as well.

+----------------------------------------------------------------------+
| **Fully Populated VIP Object**                                       |
+------------------------+----------+----------------------------------+
| Parameters             | Type     | Description                      |
+========================+==========+==================================+
| ip_address             | IPv(4|6) | Frontend IP of load balancer     |
+------------------------+----------+----------------------------------+
| port_id                | UUID     | ``UUID`` for port                |
|                        |          | (equivalent to neutron port)     |
+------------------------+----------+----------------------------------+
| network_id             | UUID     | ``UUID`` for network             |
|                        |          | (equivalent to neutron subnet)   |
+------------------------+----------+----------------------------------+

List Load Balancers
*******************

Retrieve a list of load balancers.

+----------------+-------------------------------+
| Request Type   | ``GET``                       |
+----------------+-------------------------------+
| Endpoint       | ``URL/v1/loadbalancers``      |
+----------------+---------+---------------------+
|                | Success | 200                 |
| Response Codes +---------+---------------------+
|                | Error   | 400, 401, 404, 500  |
+----------------+---------+---------------------+

**Response Example**::



    [
        {
            "id": "bdd6532c-28ff-4ab9-b582-8b10f1ae5551",
            "vip": {
                "port_id": "f6c2fd2e-d9c2-404d-9886-759b034c04ad",
                "network_id": "e1a4880d-6d9f-4784-9a03-5cc7a81990a7",
                "ip_address": "192.0.2.1"
            },
            "name": "lb_name",
            "description": "lb_description",
            "enabled": true,
            "provisioning_status": "ACTIVE",
            "operating_status": "ONLINE"
        }
    ]


List Load Balancer Details
**************************

Retrieve details of a load balancer.

+----------------+----------------------------------+
| Request Type   | ``GET``                          |
+----------------+----------------------------------+
| Endpoint       | ``URL/v1/loadbalancers/{lb_id}`` |
+----------------+---------+------------------------+
|                | Success | 200                    |
| Response Codes +---------+------------------------+
|                | Error   | 401, 404, 500          |
+----------------+---------+------------------------+

**Response Example**::

    {
        "id": "ea200d0d-d3fd-4033-8a3c-e6fcd02bf288",
        "vip":{
            "port_id": "9d4b829b-10f6-4119-8cce-33e59e5016f8",
            "network_id": "5c124402-fe20-48c6-927f-1c0eda152449",
            "ip_address": "192.0.2.1"
        },
        "name": "lb_name",
        "description": "lb_description",
        "enabled": true,
        "provisioning_status": "ACTIVE",
        "operating_status": "ONLINE"
    }


List Load Balancer Statistics
*****************************

Retrieve the stats of a load balancer.

+----------------+-----------------------------------------------------------+
| Request Type   | ``GET``                                                   |
+----------------+-----------------------------------------------------------+
| Endpoint       | ``URL/v1/loadbalancers/{lb_id}/stats``                    |
+----------------+---------+-------------------------------------------------+
|                | Success | 200                                             |
| Response Codes +---------+-------------------------------------------------+
|                | Error   | 401, 404, 500                                   |
+----------------+---------+-------------------------------------------------+

**Response Example**::

    {
        "loadbalancer": {
            "bytes_in": 0,
            "bytes_out": 0,
            "active_connections": 0,
            "total_connections": 0,
            "request_errors": 0,
            "listeners": [{
                "id": "9222e04d-5f40-441b-89ff-fdad75c91d51"
                "bytes_in": 0,
                "bytes_out": 0,
                "active_connections": 0,
                "total_connections": 0,
                "request_errors": 0,
            }]
        }
    }


Create Load Balancer
********************

Create a load balancer.

+----------------+----------------------------------------+
| Request Type   | ``POST``                               |
+----------------+----------------------------------------+
| Endpoint       | ``URL/v1/loadbalancers``               |
+----------------+---------+------------------------------+
|                | Success | 202                          |
| Response Codes +---------+------------------------------+
|                | Error   | 400, 401, 403, 404, 500, 503 |
+----------------+---------+------------------------------+

|

+------------------------+
| Request Parameters     |
+-------------+----------+
| Parameters  | Required |
+=============+==========+
| vip         | yes      |
+-------------+----------+
| project_id  | no       |
+-------------+----------+
| name        | no       |
+-------------+----------+
| description | no       |
+-------------+----------+
| enabled     | no       |
+-------------+----------+

**Request Example**::

    {
        "vip": {
            "subnet_id": "81c49c61-a655-4aa0-9af5-65bbe8347eb1"
        },
        "name": "lb_name",
        "description": "lb_description",
    }

**Response Example**::

    {
        "id": "98066b41-f328-412e-b7f5-e8cac8d8974f",
        "vip":{
            "port_id": "1f1716a1-997f-4bfe-a08d-9c895b6f206e",
            "subnet_id": "81c49c61-a655-4aa0-9af5-65bbe8347eb1",
            "ip_address": "192.0.2.1"
        },
        "name": "lb_name",
        "description": "lb_description",
        "enabled": true,
        "provisioning_status": "PENDING_CREATE",
        "operating_status": "OFFLINE"
    }


Create Fully Populated Load Balancer
++++++++++++++++++++++++++++++++++++

Create a load balancer including listeners, sni containers, pools,
health monitors, l7 policies, and l7 rules.

Refer to the appropriate objects details for available attributes.

**Request Example**::

    {
        "vip": {
            "subnet_id": "d144b932-9566-4871-bfb3-00ecda4816b1"
        },
        "name": "lb_name",
        "description": "lb_description",
        "listeners": [{
            "protocol": "HTTP",
            "protocol_port": 80,
            "connection_limit": 10,
            "name": "listener_name",
            "description": "listener_description",
            "enabled": true,
            "l7policies": [{
                "action": "REDIRECT_TO_POOL",
                "redirect_pool": {
                    "protocol": "HTTP",
                    "lb_algorithm": "ROUND_ROBIN",
                    "session_persistence": {
                       "type": "HTTP_COOKIE",
                       "cookie_name": "cookie_name"
                    },
                    "name": "redirect_pool",
                    "description": "redirect_pool_description",
                    "enabled": true
                }
            }],
            "default_pool": {
                "protocol": "HTTP",
                "lb_algorithm": "ROUND_ROBIN",
                "session_persistence": {
                   "type": "HTTP_COOKIE",
                   "cookie_name": "cookie_name"
                },
                "name": "pool_name",
                "description": "pool_description",
                "enabled": true,
                "members": [{
                    "ip_address": "10.0.0.1",
                    "protocol_port": 80,
                    "weight": 10,
                    "subnet_id": "f3894f9d-e034-44bb-a966-dc6609956c6d",
                    "enabled": true
                }],
                "health_monitor":{
                    "type": "HTTP",
                    "delay": 10,
                    "timeout": 10,
                    "fall_threshold": 10,
                    "rise_threshold": 10,
                    "http_method": "GET",
                    "url_path": "/some/custom/path",
                    "expected_codes": "200",
                    "enabled": true
                }
            }
        }]
    }

**Response Example**::

    {
        "description": "lb_description",
        "provisioning_status": "PENDING_CREATE",
        "enabled": true,
        "listeners": [{
            "tls_certificate_id": null,
            "protocol": "HTTP",
            "description": "listener_description",
            "provisioning_status": "PENDING_CREATE",
            "default_pool": {
                "lb_algorithm": "ROUND_ROBIN",
                "protocol": "HTTP",
                "description": "pool_description",
                "health_monitor": {
                    "project_id": "2020619d-e409-4277-8169-832de678f4e8",
                    "expected_codes": "200",
                    "enabled": true,
                    "delay": 10,
                    "fall_threshold": 10,
                    "http_method": "GET",
                    "rise_threshold": 10,
                    "timeout": 10,
                    "url_path": "/some/custom/path",
                    "type": "HTTP"
                },
                "enabled": true,
                "session_persistence": {
                    "cookie_name": "cookie_name",
                    "type": "HTTP_COOKIE"
                },
                "members": [{
                    "project_id": "2020619d-e409-4277-8169-832de678f4e8",
                    "weight": 10,
                    "subnet_id": "f3894f9d-e034-44bb-a966-dc6609956c6d",
                    "enabled": true,
                    "protocol_port": 80,
                    "ip_address": "10.0.0.1",
                    "id": "bd105645-e444-4dd4-b207-7b4270b980ef",
                    "operating_status": "OFFLINE"
                }],
                "project_id": "2020619d-e409-4277-8169-832de678f4e8",
                "id": "49f1fbad-a9f8-434f-9e7f-41ed4bf330db",
                "operating_status": "OFFLINE",
                "name": "pool_name"
            },
            "connection_limit": 10,
            "enabled": true,
            "project_id": "2020619d-e409-4277-8169-832de678f4e8",
            "default_pool_id": "49f1fbad-a9f8-434f-9e7f-41ed4bf330db",
            "l7policies": [{
                "redirect_pool_id": "uuid",
                "description": null,
                "redirect_pool": {
                    "lb_algorithm": "ROUND_ROBIN",
                    "protocol": "HTTP",
                    "description": "redirect_pool_description",
                    "enabled": true,
                    "session_persistence": {
                        "cookie_name": "cookie_name",
                        "type": "HTTP_COOKIE"
                    },
                    "members": [],
                    "project_id": "2020619d-e409-4277-8169-832de678f4e8",
                    "id": "49f1fbad-a9f8-434f-9e7f-41ed4bf330db",
                    "operating_status": "OFFLINE",
                    "name": "redirect_pool"
                },
                "l7rules": [],
                "enabled": true,
                "redirect_url": null,
                "action": "REDIRECT_TO_POOL",
                "position": 1,
                "id": "b69b041c-0fa7-4682-b04f-c0383178a9a7",
                "name": null
            }],
            "sni_containers": [],
            "protocol_port": 80,
            "id": "6249f94f-c936-4e69-9635-8f1b82c99d54",
            "operating_status": "OFFLINE",
            "name": "listener_name"
        }],
        "vip": {
            "subnet_id": "d144b932-9566-4871-bfb3-00ecda4816b1",
            "port_id": null,
            "ip_address": null
        },
        "project_id": "2020619d-e409-4277-8169-832de678f4e8",
        "id": "65e2ee4f-8aca-486a-88d4-0b9e7023795f",
        "operating_status": "OFFLINE",
        "name": "lb_name"
    }


Update Load Balancer
********************

Modify mutable fields of a load balancer.

+----------------+-----------------------------------+
| Request Type   | ``PUT``                           |
+----------------+-----------------------------------+
| Endpoint       | ``URL/v1/loadbalancers/{lb_id}``  |
+----------------+---------+-------------------------+
|                | Success | 202                     |
| Response Codes +---------+-------------------------+
|                | Error   | 400, 401, 404, 409, 500 |
+----------------+---------+-------------------------+

|

+-------------+----------+
| Parameters  | Required |
+=============+==========+
| name        | no       |
+-------------+----------+
| description | no       |
+-------------+----------+
| enabled     | no       |
+-------------+----------+

**Request Example**::

    {
        "name": "diff_lb_name",
        "description": "diff_lb_description",
        "enabled": false
    }

**Response Example**::

    {
        "id": "6853b957-4bc6-471c-8f50-aeee8a9533ec",
        "vip":{
            "port_id": "uuid",
            "network_id": "uuid",
            "ip_address": "192.0.2.1"
        },
        "name": "diff_lb_name",
        "description": "diff_lb_description",
        "enabled": true,
        "provisioning_status": "PENDING_CREATE",
        "operating_status": "OFFLINE"
    }

Delete Load Balancer
********************

Delete a load balancer.

+----------------+----------------------------------+
| Request Type   | ``DELETE``                       |
+----------------+----------------------------------+
| Endpoint       | ``URL/v1/loadbalancers/{lb_id}`` |
+----------------+---------+------------------------+
|                | Success | 202                    |
| Response Codes +---------+------------------------+
|                | Error   | 401, 404, 409, 500     |
+----------------+---------+------------------------+

**No request/response body**

Delete Load Balancer Cascade
****************************

Delete a load balancer and all the underlying resources (e.g. listener, pool).

+----------------+-------------------------------------------------+
| Request Type   | ``DELETE``                                      |
+----------------+-------------------------------------------------+
| Endpoint       | ``URL/v1/loadbalancers/{lb_id}/delete_cascade`` |
+----------------+---------+---------------------------------------+
|                | Success | 202                                   |
| Response Codes +---------+---------------------------------------+
|                | Error   | 401, 404, 409, 500                    |
+----------------+---------+---------------------------------------+

**No request/response body**


Listeners
---------

+------------------------------------------------------------------------+
| **Fully Populated Listener Object**                                    |
+---------------------+------------+-------------------------------------+
| Parameters          | Type       | Description                         |
+=====================+============+=====================================+
| id                  | UUID       | Listener ID                         |
+---------------------+------------+-------------------------------------+
| protocol            | String     | Network protocol from the \         |
|                     |            | following: ``TCP``, ``HTTP``, \     |
|                     |            | ``HTTPS``                           |
+---------------------+------------+-------------------------------------+
| protocol_port       | UUID       | Port the protocol will listen on    |
+---------------------+------------+-------------------------------------+
| connection_limit    | String     | Number of connections allowed at \  |
|                     |            | any given time                      |
+---------------------+------------+-------------------------------------+
| default_tls\        | String     | Barbican ``UUID`` for TLS container |
| _container_id       |            |                                     |
+---------------------+------------+-------------------------------------+
| default_pool_id     | UUID       | ``UUID`` of the pool to which \     |
|                     |            | requests will be routed by default  |
+---------------------+------------+-------------------------------------+
| project_id          | String     | ``UUID`` for project                |
+---------------------+------------+-------------------------------------+
| name                | String     | String detailing the name of the \  |
|                     |            | listener                            |
+---------------------+------------+-------------------------------------+
| description         | String     | String detailing information \      |
|                     |            | about the listener                  |
+---------------------+------------+-------------------------------------+
| enabled             | Boolean    | Whether or not the listener \       |
|                     |            | should be online immediately        |
+---------------------+------------+-------------------------------------+
| operating_status    | String     | Network status of a listener        |
+---------------------+------------+-------------------------------------+
| provisioning_status | String     | Physical status of a listener       |
+---------------------+------------+-------------------------------------+
| insert_headers      | Dictionary | Dictionary of additional headers \  |
|                     |            | insertion into HTTP header          |
+---------------------+------------+-------------------------------------+

List Listeners
**************

Retrieve a list of listeners.

+----------------+--------------------------------------------+
| Request Type   | ``GET``                                    |
+----------------+--------------------------------------------+
| Endpoint       | ``URL/v1/loadbalancers/{lb_id}/listeners`` |
+----------------+---------+----------------------------------+
|                | Success | 200                              |
| Response Codes +---------+----------------------------------+
|                | Error   | 401, 404, 500                    |
+----------------+---------+----------------------------------+

**Response Example**::

   [
       {
           "tls_certificate_id": null,
           "protocol": "HTTP",
           "description": "listener_description",
           "provisioning_status": "ACTIVE",
           "connection_limit": 10,
           "enabled": true,
           "sni_containers": [],
           "protocol_port": 80,
           "id": "0cc73a2d-8673-4476-bc02-8d7e1f9b7f07",
           "operating_status": "ONLINE",
           "name": "listener_name",
           "default_pool_id": "6c32713a-de18-45a5-b547-63740ec20efb"
       }
   ]

List Listener Details
*********************

Retrieve details of a listener.

+----------------+----------------------------------------------------------+
| Request Type   | ``GET``                                                  |
+----------------+----------------------------------------------------------+
| Endpoint       | ``URL/v1/loadbalancers/{lb_id}/listeners/{listener_id}`` |
+----------------+---------+------------------------------------------------+
|                | Success | 200                                            |
| Response Codes +---------+------------------------------------------------+
|                | Error   | 401, 404, 500                                  |
+----------------+---------+------------------------------------------------+

**Response Example**::

    {
         "tls_certificate_id": null,
         "protocol": "HTTP",
         "description": "listener_description",
         "provisioning_status": "ACTIVE",
         "connection_limit": 10,
         "enabled": true,
         "sni_containers": [],
         "protocol_port": 80,
         "id": "uuid",
         "operating_status": "ONLINE",
         "name": "listener_name",
         "default_pool_id": "e195954b-78eb-45c2-8a9c-2acfe6a65368"
    }

List Listener Statistics
************************

Retrieve the stats of a listener.

+----------------+-----------------------------------------------------------+
| Request Type   | ``GET``                                                   |
+----------------+-----------------------------------------------------------+
| Endpoint       | ``URL/v1/loadbalancers/{lb_id}/listeners/{listener_id}``\ |
|                | ``/stats``                                                |
+----------------+---------+-------------------------------------------------+
|                | Success | 200                                             |
| Response Codes +---------+-------------------------------------------------+
|                | Error   | 401, 404, 500                                   |
+----------------+---------+-------------------------------------------------+

**Response Example**::

    {
        "listener": {
            "bytes_in": 1000,
            "bytes_out": 1000,
            "active_connections": 1,
            "total_connections": 1,
            "request_errors": 0
        }
    }

Create Listener
***************

Create a listener.

+----------------+---------------------------------------------+
| Request Type   | ``POST``                                    |
+----------------+---------------------------------------------+
| Endpoint       | ``URL/v1/loadbalancers/{lb_id}/listeners``  |
+----------------+---------+-----------------------------------+
|                | Success | 202                               |
| Response Codes +---------+-----------------------------------+
|                | Error   | 400, 401, 403, 404, 409, 500, 503 |
+----------------+---------+-----------------------------------+

|

+------------------+----------+
| Parameters       | Required |
+==================+==========+
| protocol         | yes      |
+------------------+----------+
| protocol_port    | yes      |
+------------------+----------+
| connection_limit | no       |
+------------------+----------+
| default_tls\     | no       |
| _container_id    |          |
+------------------+----------+
| project_id       | no       |
+------------------+----------+
| name             | no       |
+------------------+----------+
| description      | no       |
+------------------+----------+
| default_pool_id  | no       |
+------------------+----------+
| enabled          | no       |
+------------------+----------+
| insert_headers   | no       |
+------------------+----------+

**Request Example**::

    {
        "protocol": "HTTPS",
        "protocol_port": 88,
        "connection_limit": 10,
        "default_tls_container_id": "uuid",
        "name": "listener_name",
        "description": "listener_description",
        "default_pool_id": "c50bd338-dd67-41f8-ab97-fdb42ee9080b",
        "enabled": true,
        "insert_headers": {"X-Forwarded-For": "true", "X-Forwarded-Port": "true"}
    }

**Response Example**::

   {
        "tls_certificate_id": null,
        "protocol": "HTTPS",
        "description": "listener_description",
        "provisioning_status": "PENDING_CREATE",
        "connection_limit": 10,
        "enabled": true,
        "sni_containers": [],
        "protocol_port": 88,
        "id": "e4c463d7-f21e-4b82-b2fd-813656824d90",
        "operating_status": "OFFLINE",
        "name": "listener_name",
        "default_pool_id": "c50bd338-dd67-41f8-ab97-fdb42ee9080b"
   }

Update Listener
***************

Modify mutable fields of a listener.

+----------------+----------------------------------------------------------+
| Request Type   | ``PUT``                                                  |
+----------------+----------------------------------------------------------+
| Endpoint       | ``URL/v1/loadbalancers/{lb_id}/listeners/{listener_id}`` |
+----------------+---------+------------------------------------------------+
|                | Success | 202                                            |
| Response Codes +---------+------------------------------------------------+
|                | Error   | 400, 401, 404, 409, 500                        |
+----------------+---------+------------------------------------------------+

|

+------------------+----------+
| Parameters       | Required |
+==================+==========+
| protocol         | no       |
+------------------+----------+
| protocol_port    | no       |
+------------------+----------+
| connection_limit | no       |
+------------------+----------+
| tls_certificate\ | no       |
| _id              |          |
+------------------+----------+
| name             | no       |
+------------------+----------+
| description      | no       |
+------------------+----------+
| default_pool_id  | no       |
+------------------+----------+
| enabled          | no       |
+------------------+----------+

**Request Example**::

    {
        "protocol": "HTTPS",
        "protocol_port": 88,
        "connection_limit": 10,
        "tls_certificate_id": "af4783a7-1bae-4dc3-984a-1bdf98639ef1",
        "name": "listener_name",
        "description": "listener_description",
        "default_pool_id": "262d81d4-3672-4a63-beb9-0b851063d480",
        "enabled": true
    }

**Response Example**::

    {
        "tls_certificate_id": "af4783a7-1bae-4dc3-984a-1bdf98639ef1",
        "protocol": "HTTPS",
        "description": "listener_description",
        "provisioning_status": "ACTIVE",
        "connection_limit": 10,
        "enabled": true,
        "sni_containers": [],
        "protocol_port": 88,
        "id": "15d69c9b-c87c-4155-a88f-f8bbe4298590",
        "operating_status": "ONLINE",
        "name": "listener_name",
        "default_pool_id": "262d81d4-3672-4a63-beb9-0b851063d480"
    }

Delete Listener
***************

Delete a listener.

+----------------+----------------------------------------------------------+
| Request Type   | ``DELETE``                                               |
+----------------+----------------------------------------------------------+
| Endpoint       | ``URL/v1/loadbalancers/{lb_id}/listeners/{listener_id}`` |
+----------------+---------+------------------------------------------------+
|                | Success | 202                                            |
| Response Codes +---------+------------------------------------------------+
|                | Error   | 401, 404, 409, 500                             |
+----------------+---------+------------------------------------------------+

**No request/response body**

Pools
-----

+--------------------------------------------------------------------------+
| **Fully Populated Pool Object**                                          |
+---------------------+---------------+------------------------------------+
| Parameters          | Type          | Description                        |
+=====================+===============+====================================+
| id                  | UUID          | Pool ID                            |
+---------------------+---------------+------------------------------------+
| protocol            | String        | Network protocol from the \        |
|                     |               | following: ``TCP``, ``HTTP``, \    |
|                     |               | ``HTTPS``                          |
+---------------------+---------------+------------------------------------+
| lb_algorithm        | UUID          | Load balancing algorithm from \    |
|                     |               | the following: \                   |
|                     |               | ``LEAST_CONNECTIONS``, \           |
|                     |               | ``SOURCE_IP``, ``ROUND_ROBIN``     |
+---------------------+---------------+------------------------------------+
| session_persistence | Session \     | JSON Session Persistence object \  |
|                     | Persistence \ | (see below)                        |
|                     | Object        |                                    |
+---------------------+---------------+------------------------------------+
| name                | String        | String for pool name               |
+---------------------+---------------+------------------------------------+
| description         | String        | String detailing information \     |
|                     |               | about the pool                     |
+---------------------+---------------+------------------------------------+
| enabled             | Boolean       | Whether or not the pool \          |
|                     |               | should be online immediately       |
+---------------------+---------------+------------------------------------+

|

+---------------------------------------------------------------+
| **Fully Populated Session Persistence Object**                |
+-------------+--------+----------------------------------------+
| Parameters  | Type   | Description                            |
+-------------+--------+----------------------------------------+
| type        | String | Type of session persistence from the \ |
|             |        | following: HTTP_COOKIE, SOURCE_IP      |
+-------------+--------+----------------------------------------+
| cookie_name | String | The name of the cookie. (Only \        |
|             |        | required for HTTP_COOKIE)              |
+-------------+--------+----------------------------------------+

List Pools
**********

Retrieve a list of pools on a loadbalancer. This API endpoint
will list all pools on a loadbalancer or optionally all the active pools
on a listener, depending on whether the ``listener_id`` query string is
appended below.

+----------------+-----------------------------------------------------------+
| Request Type   | ``GET``                                                   |
+----------------+-----------------------------------------------------------+
| Endpoints      | ``URL/v1/loadbalancers/{lb_id}/pools``\                   |
|                | ``[?listener_id={listener_id}]``                          |
|                |                                                           |
|                | **DEPRECATED** ``URL/v1/loadbalancers/{lb_id}``\          |
|                | ``/listeners/{listener_id}/pools``                        |
+----------------+---------+-------------------------------------------------+
|                | Success | 200                                             |
| Response Codes +---------+-------------------------------------------------+
|                | Error   | 401, 404, 500                                   |
+----------------+---------+-------------------------------------------------+

**Response Example**::

    [
       {
           "id": "520367bf-0b09-4b91-8a2a-9a5996503bdc",
           "protocol": "HTTP",
           "lb_algorithm": "ROUND_ROBIN",
           "session_persistence": {
                "type": "HTTP_COOKIE",
                "cookie_name": "cookie_name"
           },
           "name": "pool_name",
           "description": "pool_description",
           "enabled": true,
           "operating_status": "ONLINE"
       }
    ]

List Pool Details
*****************

Retrieve details of a pool.

+----------------+-----------------------------------------------------------+
| Request Type   | ``GET``                                                   |
+----------------+-----------------------------------------------------------+
| Endpoint       | ``URL/v1/loadbalancers/{lb_id}/pools/{pool_id}``          |
|                |                                                           |
|                | **DEPRECATED:** ``URL/v1/loadbalancers/{lb_id}``\         |
|                | ``/listeners/{listener_id}/pools/{pool_id}``              |
+----------------+---------+-------------------------------------------------+
|                | Success | 200                                             |
| Response Codes +---------+-------------------------------------------------+
|                | Error   | 401, 404, 500                                   |
+----------------+---------+-------------------------------------------------+

**Response Example**::

    {
        "id": "46c1d8da-bb98-4922-8262-5b36dc11017f",
        "protocol": "HTTP",
        "lb_algorithm": "ROUND_ROBIN",
        "session_persistence": {
            "type": "HTTP_COOKIE",
            "cookie_name": "cookie_name"
        },
        "name": "pool_name",
        "description": "pool_description",
        "enabled": true,
        "operating_status": "ONLINE"
    }

Create Pool
***********

Create a pool.

+----------------+-----------------------------------------------------------+
| Request Type   | ``POST``                                                  |
+----------------+-----------------------------------------------------------+
| Endpoint       | ``URL/v1/loadbalancers/{lb_id}/pools``                    |
|                |                                                           |
|                | **DEPRECATED:** ``URL/v1/loadbalancers/{lb_id}``\         |
|                | ``/listeners/{listener_id}/pools``                        |
+----------------+---------+-------------------------------------------------+
|                | Success | 202                                             |
| Response Codes +---------+-------------------------------------------------+
|                | Error   | 400, 401, 403, 404, 500, 503                    |
+----------------+---------+-------------------------------------------------+

|

+--------------+----------+
| Parameters   | Required |
+==============+==========+
| protocol     | yes      |
+--------------+----------+
| lb_algorithm | yes      |
+--------------+----------+
| session\     | no       |
| _persistence |          |
+--------------+----------+
| name         | no       |
+--------------+----------+
| description  | no       |
+--------------+----------+
| enabled      | no       |
+--------------+----------+

**Request Example**::

    {
        "protocol": "HTTP",
        "lb_algorithm": "ROUND_ROBIN",
        "session_persistence": {
           "type": "HTTP_COOKIE",
           "cookie_name": "cookie_name"
        },
        "name": "pool_name",
        "description": "pool_description",
        "enabled": true
    }

**Response Example**::

    {
        "lb_algorithm": "ROUND_ROBIN",
        "protocol": "HTTP",
        "description": "pool_description",
        "enabled": true,
        "session_persistence": {
            "cookie_name": "cookie_name",
            "type": "HTTP_COOKIE"
        },
        "id": "6ed2783b-2d87-488d-8452-9b5dfa804728",
        "operating_status": "OFFLINE",
        "name": "pool_name"
    }

Update Pool
***********

Modify mutable attributes of a pool.

+----------------+-----------------------------------------------------------+
| Request Type   | ``PUT``                                                   |
+----------------+-----------------------------------------------------------+
| Endpoint       | ``URL/v1/loadbalancers/{lb_id}/pools/{pool_id}``          |
|                |                                                           |
|                | **DEPRECATED:** ``URL/v1/loadbalancers/{lb_id}``\         |
|                | ``/listeners/{listener_id}/pools/{pool_id}``              |
+----------------+---------+-------------------------------------------------+
|                | Success | 202                                             |
| Response Codes +---------+-------------------------------------------------+
|                | Error   | 400, 401, 404, 409, 500                         |
+----------------+---------+-------------------------------------------------+

|

+---------------------+----------+
| Parameters          | Required |
+=====================+==========+
| protocol            | no       |
+---------------------+----------+
| lb_algorithm        | yes      |
+---------------------+----------+
| session_persistence | no       |
+---------------------+----------+
| name                | no       |
+---------------------+----------+
| description         | no       |
+---------------------+----------+
| enabled             | no       |
+---------------------+----------+

**Request Example**::

    {
        "protocol": "HTTP",
        "lb_algorithm": "ROUND_ROBIN",
        "session_persistence": {
            "type": "HTTP_COOKIE",
            "cookie_name": "cookie_name"
        },
        "name": "diff_pool_name",
        "description": "pool_description",
        "enabled": true
    }

**Response Example**::

    {
        "id": "44034c98-47c9-48b3-8648-2024eeafdb53",
        "protocol": "HTTP",
        "lb_algorithm": "ROUND_ROBIN",
        "session_persistence": {
            "type": "HTTP_COOKIE",
            "cookie_name": "cookie_name"
        },
        "name": "diff_pool_name",
        "description": "pool_description",
        "enabled": true,
        "operating_status": "ONLINE"
    }

Delete Pool
***********

Delete a pool.

+----------------+-----------------------------------------------------------+
| Request Type   | ``DELETE``                                                |
+----------------+-----------------------------------------------------------+
| Endpoint       | ``URL/v1/loadbalancers/{lb_id}/pools/{pool_id}``          |
|                |                                                           |
|                | **DEPRECATED:** ``URL/v1/loadbalancers/{lb_id}``\         |
|                | ``/listeners/{listener_id}/pools/{pool_id}``              |
+----------------+---------+-------------------------------------------------+
|                | Success | 202                                             |
| Response Codes +---------+-------------------------------------------------+
|                | Error   | 401, 404, 409, 500                              |
+----------------+---------+-------------------------------------------------+

**No request/response body**

Health Monitors
---------------

+-----------------------------------------------------------------+
| **Fully Populated Health Monitor Object**                       |
+----------------+---------+--------------------------------------+
| Parameters     | Type    | Description                          |
+================+=========+======================================+
| type           | String  | Type of health monitoring from \     |
|                |         | the following: ``PING``, ``TCP``, \  |
|                |         | ``HTTP``, ``HTTPS``                  |
+----------------+---------+--------------------------------------+
| delay          | Integer | Delay between health checks          |
+----------------+---------+--------------------------------------+
| timeout        | Integer | Timeout to decide whether or not \   |
|                |         | a health check fails                 |
+----------------+---------+--------------------------------------+
| fall_threshold | Integer | Number of health checks that can \   |
|                |         | fail before the pool member is \     |
|                |         | moved from ``ONLINE`` to ``OFFLINE`` |
+----------------+---------+--------------------------------------+
| rise_threshold | Integer | Number of health checks that can \   |
|                |         | pass before the pool member is \     |
|                |         | moved from ``OFFLINE`` to ``ONLINE`` |
+----------------+---------+--------------------------------------+
| http_method    | String  | HTTP protocol method to use for \    |
|                |         | the health check request             |
+----------------+---------+--------------------------------------+
| url_path       | String  | URL endpoint to hit for the \        |
|                |         | health check request                 |
+----------------+---------+--------------------------------------+
| expected_codes | String  | Comma separated list of expected \   |
|                |         | response codes during the health \   |
|                |         | check                                |
+----------------+---------+--------------------------------------+
| enabled        | Boolean | Enable/Disable health monitoring     |
+----------------+---------+--------------------------------------+

List Health Monitor Details
***************************

Retrieve details of a health monitor.

+----------------+-----------------------------------------------------------+
| Request Type   | ``GET``                                                   |
+----------------+-----------------------------------------------------------+
| Endpoint       | ``URL/v1/loadbalancers/{lb_id}``\                         |
|                | ``/pools/{pool_id}/healthmonitor``                        |
|                |                                                           |
|                | **DEPRECATED:** ``URL/v1/loadbalancers/{lb_id}``\         |
|                | ``/listeners/{listener_id}/pools/{pool_id}``\             |
|                | ``/healthmonitor``                                        |
+----------------+---------+-------------------------------------------------+
|                | Success | 200                                             |
| Response Codes +---------+-------------------------------------------------+
|                | Error   | 401, 404, 500                                   |
+----------------+---------+-------------------------------------------------+

**Response Example**::

    {
        "type": "HTTP",
        "delay": 10,
        "timeout": 10,
        "fall_threshold": 10,
        "rise_threshold": 10,
        "http_method": "GET",
        "url_path": "/some/custom/path",
        "expected_codes": "200",
        "enabled": true
    }

Create Health Monitor
*********************

Create a health monitor.

+----------------+-----------------------------------------------------------+
| Request Type   | ``POST``                                                  |
+----------------+-----------------------------------------------------------+
| Endpoint       | ``URL/v1/loadbalancers/{lb_id}``\                         |
|                | ``/pools/{pool_id}/healthmonitor``                        |
|                |                                                           |
|                | **DEPRECATED:** ``URL/v1/loadbalancers/{lb_id}``\         |
|                | ``/listeners/{listener_id}/pools/{pool_id}``\             |
|                | ``/healthmonitor``                                        |
+----------------+---------+-------------------------------------------------+
|                | Success | 202                                             |
| Response Codes +---------+-------------------------------------------------+
|                | Error   | 400, 401, 403, 404, 500, 503                    |
+----------------+---------+-------------------------------------------------+

|

+----------------+----------+
| Parameters     | Required |
+================+==========+
| type           | yes      |
+----------------+----------+
| delay          | yes      |
+----------------+----------+
| timeout        | yes      |
+----------------+----------+
| fall_threshold | yes      |
+----------------+----------+
| rise_threshold | yes      |
+----------------+----------+
| http_method    | no       |
+----------------+----------+
| url_path       | no       |
+----------------+----------+
| expected_codes | no       |
+----------------+----------+
| enabled        | no       |
+----------------+----------+

**Request Example**::

    {
        "type": "HTTP",
        "delay": 10,
        "timeout": 10,
        "fall_threshold": 10,
        "rise_threshold": 10,
        "http_method": "GET",
        "url_path": "/some/custom/path",
        "expected_codes": "200",
        "enabled": true
    }

**Response Example**::

    {
        "type": "HTTP",
        "delay": 10,
        "timeout": 10,
        "fall_threshold": 10,
        "rise_threshold": 10,
        "http_method": "GET",
        "url_path": "/some/custom/path",
        "expected_codes": "200",
        "enabled": true
    }

Update Health Monitor
*********************

Modify mutable attributes of a health monitor.

+----------------+-----------------------------------------------------------+
| Request Type   | ``PUT``                                                   |
+----------------+-----------------------------------------------------------+
| Endpoint       | ``URL/v1/loadbalancers/{lb_id}``\                         |
|                | ``/pools/{pool_id}/healthmonitor``                        |
|                |                                                           |
|                | **DEPRECATED:** ``URL/v1/loadbalancers/{lb_id}``\         |
|                | ``/listeners/{listener_id}/pools/{pool_id}``\             |
|                | ``/healthmonitor``                                        |
+----------------+---------+-------------------------------------------------+
|                | Success | 202                                             |
| Response Codes +---------+-------------------------------------------------+
|                | Error   | 400, 401, 404, 409, 500                         |
+----------------+---------+-------------------------------------------------+

|

+----------------+----------+
| Parameters     | Required |
+================+==========+
| type           | no       |
+----------------+----------+
| delay          | no       |
+----------------+----------+
| timeout        | no       |
+----------------+----------+
| fall_threshold | no       |
+----------------+----------+
| rise_threshold | no       |
+----------------+----------+
| http_method    | no       |
+----------------+----------+
| url_path       | no       |
+----------------+----------+
| expected_codes | no       |
+----------------+----------+
| enabled        | no       |
+----------------+----------+

**Request Example**::

    {
        "type": "HTTP",
        "delay": 10,
        "timeout": 10,
        "fall_threshold": 10,
        "rise_threshold": 10,
        "http_method": "GET",
        "url_path": "/some/custom/path",
        "expected_codes": "200",
        "enabled": true
    }

**Response Example**::

    {
        "type": "HTTP",
        "delay": 10,
        "timeout": 10,
        "fall_threshold": 10,
        "rise_threshold": 10,
        "http_method": "GET",
        "url_path": "/some/custom/path",
        "expected_codes": "200",
        "enabled": true
    }

Delete Health Monitor
*********************

Delete a health monitor.

+----------------+-----------------------------------------------------------+
| Request Type   | ``DELETE``                                                |
+----------------+-----------------------------------------------------------+
| Endpoint       | ``URL/v1/loadbalancers/{lb_id}``\                         |
|                | ``/pools/{pool_id}/healthmonitor``                        |
|                |                                                           |
|                | **DEPRECATED:** ``URL/v1/loadbalancers/{lb_id}``\         |
|                | ``/listeners/{listener_id}/pools/{pool_id}``\             |
|                | ``/healthmonitor``                                        |
+----------------+---------+-------------------------------------------------+
|                | Success | 202                                             |
| Response Codes +---------+-------------------------------------------------+
|                | Error   | 401, 404, 409, 500                              |
+----------------+---------+-------------------------------------------------+

Pool Members
------------

+-----------------------------------------------------------------+
| **Fully Populated Pool Member Object**                          |
+------------------+---------+------------------------------------+
| Parameters       | Type    | Description                        |
+==================+=========+====================================+
| id               | UUID    | Pool member ID                     |
+------------------+---------+------------------------------------+
| ip_address       | String  | IP address of the pool member      |
+------------------+---------+------------------------------------+
| protocol_port    | String  | Port for the protocol to listen on |
+------------------+---------+------------------------------------+
| weight           | String  | Weight of the pool member          |
+------------------+---------+------------------------------------+
| subnet_id        | UUID    | ``UUID`` of the subnet this pool \ |
|                  |         | member lives on                    |
+------------------+---------+------------------------------------+
| enabled          | Boolean | Whether or not the pool member \   |
|                  |         | should be online immediately       |
+------------------+---------+------------------------------------+
| operating_status | String  | Network status of the pool member  |
+------------------+---------+------------------------------------+

List Members
************

Retrieve a list of pool members.

+----------------+-----------------------------------------------------------+
| Request Type   | ``GET``                                                   |
+----------------+-----------------------------------------------------------+
| Endpoint       | ``URL/v1/loadbalancers/{lb_id}``\                         |
|                | ``/pools/{pool_id}/members``                              |
|                |                                                           |
|                | **DEPRECATED:** ``URL/v1/loadbalancers/{lb_id}``\         |
|                | ``/listeners/{listener_id}/pools/{pool_id}``\             |
|                | ``/members``                                              |
+----------------+---------+-------------------------------------------------+
|                | Success | 200                                             |
| Response Codes +---------+-------------------------------------------------+
|                | Error   | 401, 404, 500                                   |
+----------------+---------+-------------------------------------------------+

**Response Example**::

     [
        {
           "id": "8b8056dc-89ff-4d08-aa5d-6f8d6c2a44ec",
           "ip_address": "10.0.0.1",
           "protocol_port": 80,
           "weight": 10,
           "subnet_id": "6fd8cb41-f56d-49f0-bf19-db3dbf3191dc",
           "enabled": true,
           "operating_status": "ONLINE"
        }
     ]

List Member Details
*******************

Retrieve details of a pool member.

+----------------+-----------------------------------------------------------+
| Request Type   | ``GET``                                                   |
+----------------+-----------------------------------------------------------+
| Endpoint       | ``URL/v1/loadbalancers/{lb_id}``\                         |
|                | ``/pools/{pool_id}/members/{member_id}``                  |
|                |                                                           |
|                | **DEPRECATED:** ``URL/v1/loadbalancers/{lb_id}``\         |
|                | ``/listeners/{listener_id}/pools/{pool_id}``\             |
|                | ``/members/{member_id}``                                  |
+----------------+---------+-------------------------------------------------+
|                | Success | 200                                             |
| Response Codes +---------+-------------------------------------------------+
|                | Error   | 401, 404, 500                                   |
+----------------+---------+-------------------------------------------------+

**Response Example**::

    {
        "id": "1caf31b6-e36d-4664-959f-472c51c37439",
        "ip_address": "10.0.0.1",
        "protocol_port": 80,
        "weight": 10,
        "subnet_id": "9e58c7ae-9da2-45f2-9a2a-97e39d3ad69e",
        "enabled": true,
        "operating_status": "ONLINE"
    }

Create Member
*************

Create a pool member.

+----------------+-----------------------------------------------------------+
| Request Type   | ``POST``                                                  |
+----------------+-----------------------------------------------------------+
| Endpoint       | ``URL/v1/loadbalancers/{lb_id}``\                         |
|                | ``/pools/{pool_id}/members``                              |
|                |                                                           |
|                | **DEPRECATED:** ``URL/v1/loadbalancers/{lb_id}``\         |
|                | ``/listeners/{listener_id}/pools/{pool_id}``\             |
|                | ``/members``                                              |
+----------------+---------+-------------------------------------------------+
|                | Success | 202                                             |
| Response Codes +---------+-------------------------------------------------+
|                | Error   | 400, 401, 403, 404, 500, 503                    |
+----------------+---------+-------------------------------------------------+

|

+---------------+----------+
| Parameters    | Required |
+===============+==========+
| ip_address    | yes      |
+---------------+----------+
| protocol_port | yes      |
+---------------+----------+
| weight        | yes      |
+---------------+----------+
| subnet_id     | no       |
+---------------+----------+
| enabled       | no       |
+---------------+----------+

**Request Example**::

    {
        "ip_address": "10.0.0.1",
        "protocol_port": 80,
        "weight": 10,
        "subnet_id": "f9c3a146-a3e3-406d-9f38-e7cd1847a670",
        "enabled": true
    }

**Response Example**::

    {
        "id": "80b0841b-0ce9-403a-bfb3-391feb299cd5",
        "ip_address": "10.0.0.1",
        "protocol_port": 80,
        "weight": 10,
        "subnet_id": "f9c3a146-a3e3-406d-9f38-e7cd1847a670",
        "enabled": true,
        "operating_status": "ONLINE"
    }

Update Member
*************

Modify mutable attributes of a pool member.

+----------------+-----------------------------------------------------------+
| Request Type   | ``PUT``                                                   |
+----------------+-----------------------------------------------------------+
| Endpoint       | ``URL/v1/loadbalancers/{lb_id}``\                         |
|                | ``/pools/{pool_id}/members/{member_id}``                  |
|                |                                                           |
|                | **DEPRECATED:** ``URL/v1/loadbalancers/{lb_id}``\         |
|                | ``/listeners/{listener_id}/pools/{pool_id}``\             |
|                | ``/members/{member_id}``                                  |
+----------------+---------+-------------------------------------------------+
|                | Success | 202                                             |
| Response Codes +---------+-------------------------------------------------+
|                | Error   | 400, 401, 404, 409, 500                         |
+----------------+---------+-------------------------------------------------+

|

+---------------+----------+
| Parameters    | Required |
+===============+==========+
| protocol_port | no       |
+---------------+----------+
| weight        | no       |
+---------------+----------+
| enabled       | no       |
+---------------+----------+

**Request Example**::

    {
        "protocol_port": 80,
        "weight": 10,
        "enabled": true
    }

**Response Example**::

    {
        "id": "1e9fd5bb-3285-4346-b1c8-b13e08fdae57",
        "ip_address": "10.0.0.1",
        "protocol_port": 80,
        "weight": 10,
        "subnet_id": "c91661f3-3831-4799-9c2c-681554196d62",
        "enabled": true,
        "operating_status": "ONLINE"
    }

Delete Member
*************

Delete a pool member.

+----------------+-----------------------------------------------------------+
| Request Type   | ``DELETE``                                                |
+----------------+-----------------------------------------------------------+
| Endpoint       | ``URL/v1/loadbalancers/{lb_id}``\                         |
|                | ``/pools/{pool_id}/members/{member_id}``                  |
|                |                                                           |
|                | **DEPRECATED:** ``URL/v1/loadbalancers/{lb_id}``\         |
|                | ``/listeners/{listener_id}/pools/{pool_id}``\             |
|                | ``/members/{member_id}``                                  |
+----------------+---------+-------------------------------------------------+
|                | Success | 202                                             |
| Response Codes +---------+-------------------------------------------------+
|                | Error   | 401, 404, 409, 500                              |
+----------------+---------+-------------------------------------------------+

Layer 7 Policies
----------------
Layer 7 policies can be used to alter the behavior of the load balancing
service such that some action can be taken other than sending requests
to the listener's default_pool. If a given request matches all the layer 7
rules associated with a layer 7 policy, that layer 7 policy's action will
be taken instead of the default behavior.

+------------------------------------------------------------------------+
| **Fully Populated L7Policy Object**                                    |
+------------------+-------------+---------------------------------------+
| Parameters       | Type        | Description                           |
+==================+=============+=======================================+
| id               | UUID        | L7 Policy ID                          |
+------------------+-------------+---------------------------------------+
| name             | String      | String detailing the name of the \    |
|                  |             | l7policy                              |
+------------------+-------------+---------------------------------------+
| description      | String      | String detailing information \        |
|                  |             | about the l7policy                    |
+------------------+-------------+---------------------------------------+
| action           | String      | What action to take if the l7policy \ |
|                  |             | is matched                            |
+------------------+-------------+---------------------------------------+
| redirect_pool_id | UUID        | ID of the pool to which requests \    |
|                  |             | should be sent if action is \         |
|                  |             | ``REDIRECT_TO_POOL``                  |
+------------------+-------------+---------------------------------------+
| redirect_url     | String      | URL to which requests should be \     |
|                  |             | redirected if action is \             |
|                  |             | ``REDIRECT_TO_URL``                   |
+------------------+-------------+---------------------------------------+
| position         | Integer     | Sequence number of this L7 Policy. \  |
|                  |             | L7 Policies are evaluated in order \  |
|                  |             | starting with 1.                      |
+------------------+-------------+---------------------------------------+
| enabled          | Boolean     | Whether or not the l7policy \         |
|                  |             | should be online immediately          |
+------------------+-------------+---------------------------------------+

Layer 7 Policy actions

+----------------------+---------------------------------+
| L7 policy action     | Description                     |
+======================+=================================+
| ``REJECT``           | Requests matching this policy \ |
|                      | will be blocked.                |
+----------------------+---------------------------------+
| ``REDIRECT_TO_POOL`` | Requests matching this policy \ |
|                      | will be sent to the pool \      |
|                      | referenced by \                 |
|                      | ``redirect_pool_id``            |
+----------------------+---------------------------------+
| ``REDIRECT_TO_URL``  | Requests matching this policy \ |
|                      | will be redirected to the URL \ |
|                      | referenced by ``redirect_url``  |
+----------------------+---------------------------------+

List L7 Policies
****************

Retrieve a list of layer 7 policies.

+----------------+-----------------------------------------------------------+
| Request Type   | ``GET``                                                   |
+----------------+-----------------------------------------------------------+
| Endpoint       | ``URL/v1/loadbalancers/{lb_id}``\                         |
|                | ``/listeners/{listener_id}/l7policies``                   |
+----------------+---------+-------------------------------------------------+
|                | Success | 200                                             |
| Response Codes +---------+-------------------------------------------------+
|                | Error   | 401, 404, 500                                   |
+----------------+---------+-------------------------------------------------+

**Response Example**::

    [
        {
            "id": "1aaf9f08-eb34-41f4-afaa-bf5a8f73635d",
            "name": "Policy Name",
            "description": "Policy Description",
            "action": "REDIRECT_TO_POOL",
            "redirect_pool_id": "bab7f36c-e931-4cc3-a19d-96707fbb0a92",
            "redirect_url": None,
            "position": 1,
            "enabled": True,
        },
        {
            "id": "b5e5c33b-a1fa-44fc-8890-b546af64cf55",
            "name": "Policy Name 2",
            "description": "Policy Description 2",
            "action": "REDIRECT_TO_URL",
            "redirect_pool_id": None,
            "redirect_url": "http://www.example.com",
            "position": 2,
            "enabled": True,
        }
    ]

List L7 Policy Details
**********************

Retrieve details of a layer 7 policy.

+----------------+-----------------------------------------------------------+
| Request Type   | ``GET``                                                   |
+----------------+-----------------------------------------------------------+
| Endpoint       | ``URL/v1/loadbalancers/{lb_id}``\                         |
|                | ``/listeners/{listener_id}/l7policies/{l7policy_id}``     |
+----------------+---------+-------------------------------------------------+
|                | Success | 200                                             |
| Response Codes +---------+-------------------------------------------------+
|                | Error   | 401, 404, 500                                   |
+----------------+---------+-------------------------------------------------+

**Response Example**::

    {
        "id": "6d6ebf41-d492-4eff-b392-f8099feb23b6",
        "name": "Policy Name",
        "description": "Policy Description",
        "action": "REDIRECT_TO_POOL",
        "redirect_pool_id": "3295874d-ed51-4c4d-9876-350591946713",
        "redirect_url": None,
        "position": 1,
        "enabled": True,
    }

Create Layer 7 Policy
*********************

Create a layer 7 policy.

+----------------+-----------------------------------------------------------+
| Request Type   | ``POST``                                                  |
+----------------+-----------------------------------------------------------+
| Endpoint       | ``URL/v1/loadbalancers/{lb_id}``\                         |
|                | ``/listeners/{listener_id}/l7policies``                   |
+----------------+---------+-------------------------------------------------+
|                | Success | 202                                             |
| Response Codes +---------+-------------------------------------------------+
|                | Error   | 400, 401, 404, 500                              |
+----------------+---------+-------------------------------------------------+

|

+------------------+----------------------------------------+
| Parameters       | Required                               |
+==================+========================================+
| name             | no                                     |
+------------------+----------------------------------------+
| description      | no                                     |
+------------------+----------------------------------------+
| action           | yes                                    |
+------------------+----------------------------------------+
| redirect_pool_id | only if action == ``REDIRECT_TO_POOL`` |
+------------------+----------------------------------------+
| redirect_url     | only if action == ``REDIRECT_TO_URL``  |
+------------------+----------------------------------------+
| position         | no (defaults to append to list)        |
+------------------+----------------------------------------+
| enabled          | no (defaults to ``True``)              |
+------------------+----------------------------------------+

**Request Example**::

    {
        "action": "REDIRECT_TO_POOL",
        "redirect_pool_id": "341c0015-d7ed-44a6-a5e4-b1af94094f7b"
    }

**Response Example**::

    {
        "id": "23d24092-fe03-42b5-8ff4-c500767468d6",
        "name": None,
        "description": None,
        "action": "REDIRECT_TO_POOL",
        "redirect_pool_id": "341c0015-d7ed-44a6-a5e4-b1af94094f7b",
        "redirect_url": None,
        "position": 1,
        "enabled": True
    }

Update Layer 7 Policy
*********************

Modify mutable attributes of a layer 7 policy.

+----------------+-----------------------------------------------------------+
| Request Type   | ``PUT``                                                   |
+----------------+-----------------------------------------------------------+
| Endpoint       | ``URL/v1/loadbalancers/{lb_id}``\                         |
|                | ``/listeners/{listener_id}/l7policies/{l7policy_id}``     |
+----------------+---------+-------------------------------------------------+
|                | Success | 202                                             |
| Response Codes +---------+-------------------------------------------------+
|                | Error   | 400, 401, 404, 409, 500                         |
+----------------+---------+-------------------------------------------------+

|

+------------------+----------------------------------------+
| Parameters       | Required                               |
+==================+========================================+
| name             | no                                     |
+------------------+----------------------------------------+
| description      | no                                     |
+------------------+----------------------------------------+
| action           | no                                     |
+------------------+----------------------------------------+
| redirect_pool_id | only if action == ``REDIRECT_TO_POOL`` |
+------------------+----------------------------------------+
| redirect_url     | only if action == ``REDIRECT_TO_URL``  |
+------------------+----------------------------------------+
| position         | no                                     |
+------------------+----------------------------------------+
| enabled          | no                                     |
+------------------+----------------------------------------+

**Request Example**::

    {
        "action": "REDIRECT_TO_URL",
        "redirect_url": "http://www.example.com",
        "enabled": True
    }

**Response Example**::

    {
        "id": "58caa7ac-6cdc-4778-957a-17ed208355ed",
        "name": None,
        "description": None,
        "action": "REDIRECT_TO_URL",
        "redirect_pool_id": None,
        "redirect_url": "http://www.example.com",
        "position": 1,
        "enabled": True
    }

Delete Layer 7 Policy
*********************

Delete a layer 7 policy.

+----------------+-----------------------------------------------------------+
| Request Type   | ``DELETE``                                                |
+----------------+-----------------------------------------------------------+
| Endpoint       | ``URL/v1/loadbalancers/{lb_id}``\                         |
|                | ``/listeners/{listener_id}/l7policies/{l7policy_id}``     |
+----------------+---------+-------------------------------------------------+
|                | Success | 202                                             |
| Response Codes +---------+-------------------------------------------------+
|                | Error   | 401, 404, 409, 500                              |
+----------------+---------+-------------------------------------------------+

Layer 7 Rules
-------------
Layer 7 rules are individual statements of logic which match parts of
an HTTP request, session, or other protocol-specific data for any given
client request. All the layer 7 rules associated with a given layer 7 policy
are logically ANDed together to see whether the policy matches a given client
request. If logical OR behavior is desired instead, the user should instead
create multiple layer 7 policies with rules which match each of the components
of the logical OR statement.

+------------------------------------------------------------------------+
| **Fully Populated L7Rule Object**                                      |
+------------------+-------------+---------------------------------------+
| Parameters       | Type        | Description                           |
+==================+=============+=======================================+
| id               | UUID        | L7 Rule ID                            |
+------------------+-------------+---------------------------------------+
| type             | String      | type of L7 rule (see chart below)     |
+------------------+-------------+---------------------------------------+
| compare_type     | String      | comparison type to be used with the \ |
|                  |             | value in this L7 rule (see chart \    |
|                  |             | below)                                |
+------------------+-------------+---------------------------------------+
| key              | String      | Header or cookie name to match if \   |
|                  |             | rule type is ``HEADER`` or ``COOKIE`` |
+------------------+-------------+---------------------------------------+
| value            | String      | value to be compared with             |
+------------------+-------------+---------------------------------------+
| invert           | Boolean     | inverts the logic of the rule if \    |
|                  |             | ``True`` (ie. perform a logical NOT \ |
|                  |             | on the rule)                          |
+------------------+-------------+---------------------------------------+

Layer 7 rule types

+----------------------+---------------------------------+--------------------+
| L7 rule type         | Description                     | Valid comparisons  |
+======================+=================================+====================+
| ``HOST_NAME``        | Matches against the http \      | ``REGEX``, \       |
|                      | Host: header in the request.    | ``STARTS_WITH``, \ |
|                      |                                 | ``ENDS_WITH``, \   |
|                      |                                 | ``CONTAINS``, \    |
|                      |                                 | ``EQUAL_TO``       |
+----------------------+---------------------------------+--------------------+
| ``PATH``             | Matches against the path \      | ``REGEX``, \       |
|                      | portion of the URL requested    | ``STARTS_WITH``, \ |
|                      |                                 | ``ENDS_WITH``, \   |
|                      |                                 | ``CONTAINS``, \    |
|                      |                                 | ``EQUAL_TO``       |
+----------------------+---------------------------------+--------------------+
| ``FILE_TYPE``        | Matches against the file name \ | ``REGEX``, \       |
|                      | extension in the URL requested  | ``EQUAL_TO``       |
+----------------------+---------------------------------+--------------------+
| ``HEADER``           | Matches against a specified \   | ``REGEX``, \       |
|                      | header in the request           | ``STARTS_WITH``, \ |
|                      |                                 | ``ENDS_WITH``, \   |
|                      |                                 | ``CONTAINS``, \    |
|                      |                                 | ``EQUAL_TO``       |
+----------------------+---------------------------------+--------------------+
| ``COOKIE``           | Matches against a specified \   | ``REGEX``, \       |
|                      | cookie in the request           | ``STARTS_WITH``, \ |
|                      |                                 | ``ENDS_WITH``, \   |
|                      |                                 | ``CONTAINS``, \    |
|                      |                                 | ``EQUAL_TO``       |
+----------------------+---------------------------------+--------------------+

Layer 7 rule comparison types

+----------------------+----------------------------------------------------+
| L7 rule compare type | Description                                        |
+======================+====================================================+
| ``REGEX``            | string will be evaluated against regular \         |
|                      | expression stored in ``value``                     |
+----------------------+----------------------------------------------------+
| ``STARTS_WITH``      | start of string will be compared against ``value`` |
+----------------------+----------------------------------------------------+
| ``ENDS_WITH``        | end of string will be compared against ``value``   |
+----------------------+----------------------------------------------------+
| ``CONTAINS``         | string contains ``value``                          |
+----------------------+----------------------------------------------------+
| ``EQUAL_TO``         | string is exactly equal to ``value``               |
+----------------------+----------------------------------------------------+

List L7 Rules
*************

Retrieve a list of layer 7 rules.

+----------------+-----------------------------------------------------------+
| Request Type   | ``GET``                                                   |
+----------------+-----------------------------------------------------------+
| Endpoint       | ``URL/v1/loadbalancers/{lb_id}``\                         |
|                | ``/listeners/{listener_id}/l7policies/{l7policy_id}`` \   |
|                | ``/l7rules``                                              |
+----------------+---------+-------------------------------------------------+
|                | Success | 200                                             |
| Response Codes +---------+-------------------------------------------------+
|                | Error   | 401, 404, 500                                   |
+----------------+---------+-------------------------------------------------+

**Response Example**::

    [
        {
            "id": "9986e669-6da6-4979-96bd-b901858bf463",
            "type": "PATH",
            "compare_type": "STARTS_WITH",
            "key": None,
            "value": "/api",
            "invert": False
        },
        {
            "id": "560b97d4-4239-4e4c-b51c-fd0afe387f99",
            "type": "COOKIE",
            "compare_type": "REGEX",
            "key": "my-cookie",
            "value": "some-value",
            "invert": True
        }
    ]

List L7 Rule Details
********************

Retrieve details of a layer 7 rule.

+----------------+-----------------------------------------------------------+
| Request Type   | ``GET``                                                   |
+----------------+-----------------------------------------------------------+
| Endpoint       | ``URL/v1/loadbalancers/{lb_id}``\                         |
|                | ``/listeners/{listener_id}/l7policies/{l7policy_id}`` \   |
|                | ``/l7rules/{l7rule_id}``                                  |
+----------------+---------+-------------------------------------------------+
|                | Success | 200                                             |
| Response Codes +---------+-------------------------------------------------+
|                | Error   | 401, 404, 500                                   |
+----------------+---------+-------------------------------------------------+

**Response Example**::

    {
        "id": "f19ff3aa-0d24-4749-a9ed-b5b93fad0a22",
        "type": "PATH",
        "compare_type": "STARTS_WITH",
        "key": None,
        "value": "/api",
        "invert": False
    }

Create Layer 7 Rule
*******************

Create a layer 7 rule.

+----------------+-----------------------------------------------------------+
| Request Type   | ``POST``                                                  |
+----------------+-----------------------------------------------------------+
| Endpoint       | ``URL/v1/loadbalancers/{lb_id}``\                         |
|                | ``/listeners/{listener_id}/l7policies/{l7policy_id}`` \   |
|                | ``/l7rules``                                              |
+----------------+---------+-------------------------------------------------+
|                | Success | 202                                             |
| Response Codes +---------+-------------------------------------------------+
|                | Error   | 400, 401, 404, 500                              |
+----------------+---------+-------------------------------------------------+

|

+----------------+------------------------------------------+
| Parameters     | Required                                 |
+================+==========================================+
| type           | yes                                      |
+----------------+------------------------------------------+
| compare_type   | yes                                      |
+----------------+------------------------------------------+
| key            | only if type is ``HEADER`` or ``COOKIE`` |
+----------------+------------------------------------------+
| value          | yes                                      |
+----------------+------------------------------------------+
| invert         | no (Defaults to ``False``)               |
+----------------+------------------------------------------+

**Request Example**::

    {
        "type": "HOST_NAME",
        "compare_type": "ENDS_WITH",
        "value": ".example.com"
    }

**Response Example**::

    {
        "id": "27445155-c28d-4361-8158-9ff91d0eaba3",
        "type": "HOST_NAME",
        "compare_type": "ENDS_WITH",
        "key": None,
        "value": ".example.com",
        "invert": False
    }

Update Layer 7 Rule
*******************

Modify mutable attributes of a layer 7 rule.

+----------------+-----------------------------------------------------------+
| Request Type   | ``PUT``                                                   |
+----------------+-----------------------------------------------------------+
| Endpoint       | ``URL/v1/loadbalancers/{lb_id}``\                         |
|                | ``/listeners/{listener_id}/l7policies/{l7policy_id}`` \   |
|                | ``/l7rules/{l7rule_id}``                                  |
+----------------+---------+-------------------------------------------------+
|                | Success | 202                                             |
| Response Codes +---------+-------------------------------------------------+
|                | Error   | 400, 401, 404, 409, 500                         |
+----------------+---------+-------------------------------------------------+

|

+----------------+------------------------------------------+
| Parameters     | Required                                 |
+================+==========================================+
| type           | no                                       |
+----------------+------------------------------------------+
| compare_type   | no                                       |
+----------------+------------------------------------------+
| key            | only if type is ``HEADER`` or ``COOKIE`` |
+----------------+------------------------------------------+
| value          | no                                       |
+----------------+------------------------------------------+
| invert         | no                                       |
+----------------+------------------------------------------+

**Request Example**::

    {
        "type": "HEADER",
        "compare_type": "CONTAINS",
        "key": "X-My-Header",
        "value": "sample_substring"
    }

**Response Example**::

    {
        "id": "6f209661-a9b0-47ca-a60a-27154f9fe274",
        "type": "HEADER",
        "compare_type": "CONTAINS",
        "key": "X-My-Header",
        "value": "sample_substring",
        "invert": False
    }

Delete Layer 7 Rule
*******************

Delete a layer 7 rule.

+----------------+-----------------------------------------------------------+
| Request Type   | ``DELETE``                                                |
+----------------+-----------------------------------------------------------+
| Endpoint       | ``URL/v1/loadbalancers/{lb_id}``\                         |
|                | ``/listeners/{listener_id}/l7policies/{l7policy_id}`` \   |
|                | ``/l7rules/{l7rule_id}``                                  |
+----------------+---------+-------------------------------------------------+
|                | Success | 202                                             |
| Response Codes +---------+-------------------------------------------------+
|                | Error   | 401, 404, 409, 500                              |
+----------------+---------+-------------------------------------------------+


Quotas
------

+------------------------------------------------------------------------+
| **Fully Populated Quotas Object**                                      |
+---------------------+------------+-------------------------------------+
| Parameters          | Type       | Description                         |
+=====================+============+=====================================+
| project_id          | UUID       | Project ID                          |
+---------------------+------------+-------------------------------------+
| health_monitor      | Integer    | Health Monitor quota                |
+---------------------+------------+-------------------------------------+
| listener            | Integer    | Listener quota                      |
+---------------------+------------+-------------------------------------+
| load_balancer       | Integer    | Load balancer quota                 |
+---------------------+------------+-------------------------------------+
| member              | Integer    | Member quota                        |
+---------------------+------------+-------------------------------------+
| pool                | Integer    | Pool quota                          |
+---------------------+------------+-------------------------------------+

Quotas specified as null will use the configured default quota.

Unlimited quotas are represented as -1.

List Quotas
***********

List all non-default quotas.

Note: 'tenant_id' is deprecated and will be removed in a future release.
      Use 'project_id' instead.

+----------------+--------------------------------------------+
| Request Type   | ``GET``                                    |
+----------------+--------------------------------------------+
| Endpoint       | ``URL/v1/quotas``                          |
+----------------+---------+----------------------------------+
|                | Success | 200                              |
| Response Codes +---------+----------------------------------+
|                | Error   | 401, 500                         |
+----------------+---------+----------------------------------+

**Response Example**::

    {
        "quotas": [
            {
                "load_balancer": 10,
                "listener": 10,
                "health_monitor": 10,
                "tenant_id": "0c23c1e5-2fd3-4914-9b94-ab12d131a4fa",
                "member": 10,
                "project_id": "0c23c1e5-2fd3-4914-9b94-ab12d131a4fa",
                "pool": 10
            }, {
                "load_balancer": null,
                "listener": null,
                "health_monitor": 10,
                "tenant_id": "5df074f1-d173-4a69-b78c-31aeb54f4578",
                "member": null,
                "project_id": "5df074f1-d173-4a69-b78c-31aeb54f4578",
                "pool": null
            }
        ]
    }

List Quota Defaults
*******************

List the currently configured quota defaults.

+----------------+--------------------------------------------+
| Request Type   | ``GET``                                    |
+----------------+--------------------------------------------+
| Endpoint       | ``URL/v1/quotas/default``                  |
+----------------+---------+----------------------------------+
|                | Success | 200                              |
| Response Codes +---------+----------------------------------+
|                | Error   | 401, 500                         |
+----------------+---------+----------------------------------+

**Response Example**::

    {
        "quota": {
            "load_balancer": 20,
            "listener": -1,
            "member": -1,
            "pool": 10,
            "health_monitor": -1
        }
    }

List Quota Details
******************

Retrieve details of a project quota.
If the project specified does not have custom quotas, the default quotas
are returned.

+----------------+--------------------------------------------+
| Request Type   | ``GET``                                    |
+----------------+--------------------------------------------+
| Endpoint       | ``URL/v1/quotas/{project_id}``             |
+----------------+---------+----------------------------------+
|                | Success | 200                              |
| Response Codes +---------+----------------------------------+
|                | Error   | 401, 500                         |
+----------------+---------+----------------------------------+

**Response Example**::

    {
        "quota": {
            "load_balancer": 10,
            "listener": 10,
            "member": 10,
            "pool": 10,
            "health_monitor": 10
        }
    }

Update Quota
************

Modify a project's quotas.

+----------------+-----------------------------------------------------------+
| Request Type   | ``PUT``                                                   |
+----------------+-----------------------------------------------------------+
| Endpoint       | ``URL/v1/quotas/{project_id}``                            |
+----------------+---------+-------------------------------------------------+
|                | Success | 202                                             |
| Response Codes +---------+-------------------------------------------------+
|                | Error   | 400, 401, 500, 503                              |
+----------------+---------+-------------------------------------------------+

**Request Example**::

    {
        "quota": {
            "load_balancer": -1,
            "listener": 10,
            "member": 10,
            "pool": 10,
            "health_monitor": null
        }
    }

**Response Example**::

    {
        "quota": {
            "load_balancer": -1,
            "listener": 10,
            "member": 10,
            "pool": 10,
            "health_monitor": 20
        }
    }

Delete Quota
************

Delete a project's quota, reseting it to the configured default quotas.

+----------------+-----------------------------------------------------------+
| Request Type   | ``DELETE``                                                |
+----------------+-----------------------------------------------------------+
| Endpoint       | ``URL/v1/quotas/{project_id}``                            |
+----------------+---------+-------------------------------------------------+
|                | Success | 202                                             |
| Response Codes +---------+-------------------------------------------------+
|                | Error   | 401, 404, 500, 503                              |
+----------------+---------+-------------------------------------------------+