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

.. _reference-tr-api:

Traffic Router API
==================

**/crs/stats**

General stats.

|

**/crs/stats/ip/:ipaddress**

Geolocation information for an IPv4 or IPv6 address.

|

**/crs/locations**

A list of configured cache groups.

|

**/crs/locations/caches**

A mapping of caches to cache groups and their current health state.

|

/crs/locations/:location/caches

A list of caches for this cache group only.

