---
title:  GET /gemfire-api/v1/{region}/{key}
---

<!--
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 a specific key in the region.

## Resource URL

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

## Parameters

None.

## Example Request

``` pre
GET /gemfire-api/v1/orders/1

Request Payload: null
Accept: application/json
```

## Example Responses

``` pre
Response Payload: application/json

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

{
   "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           | Returned if the supplied key is not found in the region.                                            |
| 404 NOT FOUND             | Returned if the region or specified key is not found.                                               |
| 500 INTERNAL SERVER ERROR | Error encountered at <%=vars.product_name%> server. Check the HTTP response body for a stack trace of the exception. |
