# APIs

Weaviate provides multiple Application Programming Interfaces (APIs) to interact with the database, manage instances, and perform searches. Weaviate exposes three main APIs:

- **[RESTful API](/weaviate/api/rest)**: Enables almost complete management of a Weaviate instance.

  - Includes operations for managing collections (creating, reading, updating, deleting collections and their definitions), performing basic CRUD (Create, Read, Update, Delete) operations on individual data objects, checking node status, backups, and managing cluster health.
  - The machine-readable specification behind this reference is published at [`https://docs.weaviate.io/openapi.json`](/openapi.json). See [Machine-readable API specification](#machine-readable-api-specification) below.
  - The reference also lists an experimental REST Search API (the `/v1/search/{collection}/...` and `/v1/aggregate/{collection}` endpoints), which is disabled by default and rejects requests with a `422` status until [`EXPERIMENTAL_REST_SEARCH_ENABLED`](../database-configuration/overview.md#EXPERIMENTAL_REST_SEARCH_ENABLED) is set to `true`.

- **[Search API - GraphQL](graphql.md)**: Designed specifically for data querying and exploration.

  - Enables complex search operations, including semantic (vector) search (`nearText`, `nearVector`, etc.), keyword search (`bm25`), hybrid search, filtering, retrieving specific data properties, aggregations, and exploring connections between data objects (cross-references).
  - Not available on new Weaviate Cloud clusters. They are created with GraphQL disabled. Use a [client library](../client-libraries/index.md) or the [REST Search endpoints](/weaviate/api/rest) instead.

- **[Search API - gRPC](grpc.md)**: A high-performance alternative for GraphQL when it comes to demanding data operations.

  - gRPC is progressively being implemented for various Weaviate operations, particularly focusing on search/query functionalities and batch data imports. It leverages Protocol Buffers for faster serialization, lower latency, and efficient data streaming compared to traditional REST/JSON communication.

## Machine-readable API specification

The [RESTful API reference](/weaviate/api/rest) is rendered from the same specification file that Weaviate builds its REST server from: the request handlers, models, and generated Go client are all produced from it. The specification therefore defines the API rather than describing it after the fact.

For tools, code generators, and agents, that specification is published at the conventional discovery URL [`https://docs.weaviate.io/openapi.json`](/openapi.json), which is where most tooling looks for it. The document is written in **Swagger 2.0** (OpenAPI 2.0) format, not OpenAPI 3.x, so a consumer that only accepts 3.x needs to convert it first.

:::accordion{title="Alternative URL, versioning, and scope"}
`/openapi.json` serves a rewrite of [`https://docs.weaviate.io/specs/weaviate-openapi.json`](/specs/weaviate-openapi.json). Both URLs return the same document, so request whichever suits your tooling.

The published document is a copy of the specification taken from a Weaviate release branch, and it is updated periodically rather than on every release. Read its `info.version` field to see which Weaviate version it describes, and compare that with the version you are running.

The specification describes the REST API only. The [GraphQL](graphql.md) and [gRPC](grpc.md) search APIs are documented separately, and Weaviate's gRPC service is defined by its protocol buffer files rather than by this document.
:::

## Client libraries and API usage

Weaviate offers official client libraries for these programming languages:

- **[Python](../client-libraries/python.md)**
- **[TypeScript/JavaScript](../client-libraries/typescript.md)**
- **[Go](../client-libraries/go.md)**
- **[Java](../client-libraries/java.md)**

:::callout{intent="tip" title="**TIP:** Using the official client libraries for interacting with Weaviate"}
The client libraries abstract away the complexities of making direct REST, GraphQL, or gRPC calls. You interact with Weaviate using idiomatic methods and objects in your preferred language.

Modern versions of the client libraries are designed to **automatically utilize the more performant gRPC interface** for search and query operations whenever possible and supported by the Weaviate instance you are connected to. They handle the negotiation and use the optimal protocol under the hood, typically requiring only the standard connection details (like the REST endpoint URL and authentication keys) for setup.
:::

## Questions and feedback

Have a question or feedback? Here's how to reach us.

::::card-grid
:::card{title="Community Forum" href="https://forum.weaviate.io/c/support" icon="messages-square"}
Ask questions and connect with other developers on our **Community forum**.
:::

:::card{title="Support" href="/guides/support-overview" icon="life-buoy"}
Weaviate Cloud user or customer? Find the right channel on the **Support page**.
:::
::::

## Related pages

- [Agents](./agents-index.md)
- [AI-assisted Weaviate code generation](./ai-assisted-vibe-coding-index.md)
- [Authorization and authentication](./authorization-and-authentication-index.md)
- [Benchmarks](./benchmarks-index.md)
- [Best practices](./best-practices-index.md)
- [Client libraries](./clients-index.md)
- [Client Libraries / SDKs](./client-libraries-index.md)
- [Cloud](./cloud-index.md)
- [Cloud account management](./cloud-account-management-index.md)
- [Cloud weaviate embeddings](./cloud-weaviate-embeddings-index.md)

# Agent Instructions

This portal answers questions programmatically. To receive a synthesized,
source-cited answer instead of crawling page by page, append the `?ask=`
query parameter to any page URL on this site:

    /guides/quickstart?ask=how+do+I+authenticate

Optional parameters:

- `&goal=<what-you-are-trying-to-do>` steers the answer toward your
  objective (e.g. `&goal=write+a+python+client`).
- `&version=<label>` scopes the answer to a mounted version when the
  portal publishes more than one.

The response is `text/markdown`: the answer followed by a `# Sources` list
of the portal pages it was grounded in. Status codes are the contract:

- `200` — the answer; `402` — the portal owner’s plan or answer credits are
  exhausted (surface this to your operator; do NOT retry); `429` — you are
  rate-limited; back off for the `Retry-After` seconds; `503` — the answer
  lane is temporarily unavailable; fall back to crawling the `.md` pages.

For the full corpus map read `llms.txt` at the site root; for the tool
surface (search + page fetch as MCP tools) see `/mcp`.
