---
title:  Query Endpoints
---

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

<%=vars.product_name%> uses a query syntax based on OQL (Object Query Language) to query region data. Since <%=vars.product_name%> regions are key-value stores, values can range from simple byte arrays to complex nested objects.

-   **[GET /geode/v1/queries](get_queries.html)**

    List all parameterized queries by ID or name.

-   **[POST /geode/v1/queries?id=&lt;queryId&gt;&q=&lt;OQL-statement&gt;](post_create_query.html)**

    Create (prepare) the specified parameterized query and assign the corresponding ID for lookup.

-   **[POST /geode/v1/queries/{queryId}](post_execute_query.html)**

    Execute the specified named query passing in scalar values for query parameters in the POST body.

-   **[PUT /geode/v1/queries/{queryId}](put_update_query.html)**

    Update a named, parameterized query.

-   **[DELETE /geode/v1/queries/{queryId}](delete_named_query.html)**

    Delete the specified named query.

-   **[GET /geode/v1/queries/adhoc?q=&lt;OQL-statement&gt;](get_execute_adhoc_query.html)**

    Run an unnamed (unidentified), ad-hoc query passed as a URL parameter.


