---
title:  DELETE /gemfire-api/v1/queries/{queryId}
---

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

Delete the specified named query.

## Resource URL

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

## Parameters

| Parameter | Description                        | Example Values |
|-----------|------------------------------------|----------------|
| {queryId} | QueryID for named query to delete. | selectOrders   |

## Example Request

``` pre
DELETE /gemfire-api/v1/queries/selectOrders

Accept: application/json
Content-Type: application/json
```

## Example Success Response

``` pre
Response Payload: application/json

200 OK
```

## Error Codes

| Status Code               | Description                                                                                   |
|---------------------------|-----------------------------------------------------------------------------------------------|
| 401 UNAUTHORIZED          | Invalid Username or Password                                                                  |
| 403 FORBIDDEN             | Insufficient privileges for operation                                                         |
| 404 NOT FOUND             | Query with specified ID could not be found                                                    |
| 500 INTERNAL SERVER ERROR | Encountered error at server. Check the HTTP response body for a stack trace of the exception. |


