canonical: https://jentic.com/apis/fess.codelibs.org/fess

# Fess Codelibs Fess API

Fess is an open-source enterprise search server, and its REST API exposes search, suggest, label management, popular words, favourites, health checks, and admin operations across 19 endpoints. The base URL is determined per deployment via the {host} server variable, and authentication is provided through an API token sent in the Authorization header. Admin endpoints support starting and stopping the crawler and updating search list configuration.

## For AI agents

Run full-text and faceted searches against a self-hosted Fess enterprise search index, manage labels and favourites, and trigger crawler runs via 19 REST endpoints.

## Scope

Does not handle web crawling configuration UI, document parsing, or index storage - use for querying and operating an existing Fess deployment only.

## Capabilities

- Run full-text searches with faceting and pagination across crawled documents
- Get autocomplete suggestions for partially typed queries
- List popular search terms aggregated by Fess analytics
- Mark and unmark documents as user favourites
- Start and stop the Fess crawler against configured data sources
- Inspect cluster health and search list configuration

## Use cases

### Internal Knowledge Base Search

Power a chat-based internal knowledge base by routing employee queries to the Fess search endpoint and returning ranked document snippets. Fess supports both GET and POST search variants so longer query bodies can carry filter expressions. Typical deployments index Confluence, file shares, and wikis; query latency is under 100ms for indexes up to a few million documents.

Example prompt: POST /api/v1/search with the user's query and a label filter, then return the top 5 hits with title and snippet

### Search Analytics and Trending Topics

Surface trending search topics inside an organisation by polling /api/v1/popular-words and grouping by time window. This identifies emerging information needs that documentation teams should address. Fess records popular words automatically as part of its analytics pipeline.

Example prompt: GET /api/v1/popular-words and return the 10 most frequent terms, then create a Slack message summarising them

### Crawler Operations

Trigger crawler runs and inspect cluster health programmatically so an agent can refresh the index after upstream content changes without manual admin console use. Fess exposes /api/admin/crawler/start and /api/v1/health for these operations behind the same API token.

Example prompt: POST /api/admin/crawler/start, then poll GET /api/v1/health every 30 seconds until status returns OK

### AI Agent Document Retrieval via Jentic

Through Jentic, an agent can run grounded retrieval against a Fess index without writing a custom HTTP client. The agent searches Jentic for 'search documents', loads the Fess endpoint schema, and executes queries with the user's natural-language input. This unlocks RAG-style answers grounded in self-hosted enterprise content.

Example prompt: Search Jentic for 'search enterprise documents', load Fess /api/v1/search, and return the top 3 hits to feed into a Claude prompt

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| GET | /api/v1/search | Search documents |
| POST | /api/v1/search | Search documents with body |
| GET | /api/v1/suggest | Get autocomplete suggestions |
| GET | /api/v1/popular-words | List popular search words |
| GET | /api/v1/health | Get cluster health |
| POST | /api/admin/crawler/start | Start crawler |

## Key resources

- **Search** — Run full-text and faceted searches with GET and POST
- **Suggest** — Get autocomplete suggestions for partial queries
- **Labels** — List and filter by search labels
- **Popular Words** — Retrieve trending search terms
- **Favorites** — Mark documents as user favourites
- **Health** — Check Fess cluster health
- **Admin** — Manage crawler and search list configuration

## Why Jentic

- **Setup:** Wiring the Fess API by hand means pointing at your own {host} deployment, sending the token in the Authorization header, and separating the public search endpoints from the admin crawler routes yourself. Through Jentic you install once, import the Fess API from the API Directory, store the token and host once, and your agent calls it.
- **Permission scoping:** Fess search targets travel in the request, not as owned-resource path ids, so limit the agent to the operations it needs, such as search, suggest, or popular-words, and leave admin routes like starting the crawler out. Because you choose the allowed operations, an admin action runs only if you include it.
- **Credential handling:** Your Fess token and host URL are stored once, encrypted, by your own Jentic One instance and injected at execution time. The raw Authorization header value never enters the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'search enterprise documents' or 'get search suggestions', and Jentic returns the matching Fess operation with its input schema, so the agent calls it directly without reading the admin docs.

## Related APIs

- **Meilisearch API** — Open-source search engine alternative with simpler setup
- **Algolia API** — Hosted SaaS search alternative with managed indexing
- **Elastic Kibana API** — Pairs with Fess deployments that store data in Elasticsearch

## FAQ

### What authentication does the Fess API use?

Fess uses an API token sent in the Authorization header. Because Fess is self-hosted, the {host} part of the base URL is set per deployment. Through Jentic the token is encrypted in your Jentic One instance.

### Can I run faceted search through the Fess API?

Yes. Both GET /api/v1/search and POST /api/v1/search accept filter parameters and label-based facets. Use POST when query bodies grow beyond URL length limits.

### What are the rate limits for the Fess API?

Fess does not enforce server-side rate limits in the OpenAPI spec because it is self-hosted. Throughput depends on the deployment's hardware and JVM configuration.

### How do I trigger the Fess crawler through Jentic?

Search Jentic for 'start search crawler', load the POST /api/admin/crawler/start schema, and execute. Run pip install jentic to get started.

### Does Fess support autocomplete?

Yes. The GET /api/v1/suggest endpoint returns suggestion candidates for partial queries, suitable for type-ahead UIs and agent query refinement.

### Can I check Fess cluster health programmatically?

Yes. GET /api/v1/health returns cluster status, useful for readiness probes and post-crawl verification before running queries.

### Can I limit what my agent is allowed to do with the Fess API?

Yes. Because Jentic One is self-hosted, you decide which Fess operations your agent may call, so you can allow read operations like GET /api/v1/search, GET /api/v1/suggest, and GET /api/v1/popular-words while leaving admin routes such as POST /api/admin/crawler/start out entirely. Search targets travel in the request body or query rather than as owned-resource path ids, so scoping is done at the operation level you choose. Your Fess token and host URL are stored and injected by your own instance, and an admin action runs only if you explicitly include that operation.
