---
title:  HEAD /geode/v1/{region}
---

<!--
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.
-->

An HTTP HEAD request that returns region's size (number of entries) within the HEADERS, which is a response without the content-body. Region size is specified in the pre-defined header named "Resource-Count".

## Resource URL

``` pre
http://<hostname_or_http-service-bind-address>:<http-service-port>/geode/v1/{region}
```

## Parameters

None.

## Example Request

``` pre
Request Payload: null
HEAD /geode/v1/customers
Response Payload: null
```

## Example Success Response

``` pre
200 OK

Content-Length: <#-of-bytes>
Content-Type: application/json; charset=utf-8
...

Resource-Count: 8192
```

## Error Codes

| Status Code               | Description                                                                                 |
|---------------------------|---------------------------------------------------------------------------------------------|
| 400 Bad Request           | Returned if <%=vars.product_name%> throws an error while executing the request. |
| 404 Resource Not Found    | Region does not exist.                                                                      |
| 500 Internal Server Error | <%=vars.product_name%> has thown an error or exception.                         |


