---
title:  \[HEAD | GET\] /gemfire-api/v1/ping
---

<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You 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.
-->

Mechanism to check for REST API server and service availability.

## Resource URL

``` pre
http://<hostname_or_http-service-bind-address>:<http-service-port>/gemfire-api/v1/ping
```

## Parameters

None.

## Example Request

``` pre
HEAD /gemfire/v1/ping
GET /gemfire/v1/ping
```

## Example Success Response

``` pre
200 OK
```

## Error Codes

| Status Code               | Description                                                                                |
|---------------------------|--------------------------------------------------------------------------------------------|
| 404 NOT FOUND             | The Developer REST API service is not available.                                           |
| 500 INTERNAL SERVER ERROR | Encountered error at server. Check the <%=vars.product_name%> exception trace. |


