---
title:  GET /gemfire-api/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.
-->

Read data for the region. The optional limit URL query parameter specifies the number of values from the Region that will be returned. The default limit is 50. If the user specifies a limit of “ALL”, then all entry values for the region will be returned.

## Resource URL

``` pre
http://<hostname_or_http-service-bind-address>:<http-service-port>/gemfire-api/v1/{region}?[limit={<number>|ALL}]
```

## Parameters

<table>
<colgroup>
<col width="33%" />
<col width="33%" />
<col width="33%" />
</colgroup>
<thead>
<tr class="header">
<th>Parameter</th>
<th>Description</th>
<th>Example Values</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><strong>limit</strong></td>
<td><strong>Optional.</strong> Specify a limit to the number of region entries to return. If the limit parameter is not specified, the default is to return 50 results.
<p>Default: 50</p></td>
<td>ALL
<p>80</p></td>
</tr>
</tbody>
</table>

## Example Request

``` pre
GET /gemfire-api/v1/orders/
Accept: application/json
```

## Example Success Response

``` pre
Response Payload: application/json

200 OK
Server: Apache-Coyote/1.1
Content-Location: http://localhost:8080/gemfire-api/v1/orders/3,1
Content-Type: application/json
Transfer-Encoding: chunked
Date: Sat, 18 Jan 2014 21:03:08 GMT

{
  "orders" : [ {
     "purchaseOrderNo" : 1112,
     "customerId" : 102,
     "description" :  "Purchase order for  company - B",
     "orderDate" :  "02/10/2014",
     "deliveryDate" :  "02/20/2014",
     "contact" :  "John Doe",
     "email" :  "John.Doe@example.com",
     "phone" :  "01-2048096",
     "items" : [ {
       "itemNo" : 1,
       "description" :  "Product-AAAA",
       "quantity" : 10,
       "unitPrice" : 20.0,
       "totalPrice" : 200.0
    }, {
       "itemNo" : 2,
       "description" :  "Product-BBB",
       "quantity" : 15,
       "unitPrice" : 10.0,
       "totalPrice" : 150.0
    } ],
     "totalPrice" : 350.0
  }, {
     "purchaseOrderNo" : 111,
     "customerId" : 101,
     "description" :  "Purchase order for  company - A",
     "orderDate" :  "01/10/2014",
     "deliveryDate" :  "01/20/2014",
     "contact" :  "Jane Doe",
     "email" :  "Jane.Doe@example.com",
     "phone" :  "020-2048096",
     "items" : [ {
       "itemNo" : 1,
       "description" :  "Product-1",
       "quantity" : 5,
       "unitPrice" : 10.0,
       "totalPrice" : 50.0
    }, {
       "itemNo" : 1,
       "description" :  "Product-2",
       "quantity" : 10,
       "unitPrice" : 15.5,
       "totalPrice" : 155.0
    } ],
     "totalPrice" : 205.0
  } ]
}
```

## Error Codes

| Status Code        | Description                                                                                                                      |
|--------------------|----------------------------------------------------------------------------------------------------------------------------------|
| 400 BAD REQUEST    | Limit parameter **X** is not valid! The specified limit value must be ALL or an integer.                                            |
| 404 NOT FOUND      | Returned if region does not exist.                                                                                               |
| 500 INTERNAL ERROR | Error encountered at <%=vars.product_name%> server. Check the HTTP response body for a stack trace of the exception. |
