The VuFind REST API exposes library catalog search and record retrieval functionality over HTTP. All responses are returned as JSON, making it straightforward to integrate catalog data into external applications, harvesters, or custom frontends. The API follows OpenAPI 3 conventions and ships with an interactive Swagger UI for exploration.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/vufind-org/vufind/llms.txt
Use this file to discover all available pages before exploring further.
Base URL
All API v1 endpoints are served under/api/v1/:
/api or /api/v1/ without query parameters redirects you to the Swagger UI. To retrieve the raw OpenAPI specification as JSON, append ?openapi to the URL:
Authentication
VuFind supports three API key modes, configured inconfig.ini under [API_Keys]:
| Mode | Behavior |
|---|---|
disabled | API keys are not used. All requests are permitted (subject to permissions). This is the default. |
optional | Users may create and use API keys, but keys are not required. |
enforced | Every request must include a valid API key. Requests without a key receive a 401 Unauthorized response. |
X-API-KEY request header (the header name is configurable via header_field in config.ini):
Users can manage their API keys through the VuFind developer settings interface. Administrators control whether keys are optional or enforced, and can set a per-user key limit (default: 5).
Swagger UI
An interactive Swagger UI is available at:/api in a browser will redirect you there automatically. The Swagger UI lets you explore all available endpoints, inspect parameters and response schemas, and issue live test requests directly from your browser.
Available endpoints
Search
Search the primary bibliographic index. Supports faceted filtering, sorting, and cursor-based pagination.
Records
Retrieve one or more bibliographic records by their unique identifiers.
Authority
Search and retrieve records from the authority index (persons, corporate bodies, subjects).
| Endpoint | Method | Description |
|---|---|---|
GET /api/v1/search | GET, POST | Search the primary bibliographic index |
GET /api/v1/record | GET, POST | Retrieve one or more bibliographic records |
GET /api/v1/index2/search | GET, POST | Search the secondary index (Search2) |
GET /api/v1/index2/record | GET, POST | Retrieve records from the secondary index |
GET /api/v1/authority/search | GET, POST | Search the authority index |
GET /api/v1/authority/record | GET, POST | Retrieve authority records |
GET /api/v1/web/search | GET, POST | Search the website index |
GET /api/v1/web/record | GET, POST | Retrieve website index records |
DELETE /api/v1/admin/cache | DELETE | Clear application caches (requires admin permission) |
Response format
All successful responses return JSON with the following top-level envelope:OK status and an HTTP error code:
"OK" on success, "ERROR" on failure, or "UNAUTHORIZED" when a required API key is absent.Human-readable description of the error. Present only when
status is not "OK".Total number of results matching the query. Present on search and record endpoints.
Array of record objects. Present when records are returned.
Facet data keyed by facet field name. Present on search responses when facets were requested.
HTTP status codes
| Code | Meaning |
|---|---|
200 OK | Request succeeded. |
204 No Content | OPTIONS preflight request handled (CORS). |
400 Bad Request | Invalid parameter (e.g., missing id, limit out of range, invalid search syntax, expired resumption token). |
401 Unauthorized | API key required but not provided. |
403 Forbidden | The caller does not have the required permission (e.g., access.api.Search). |
500 Internal Server Error | An unexpected server error occurred. |
CORS
All API responses includeAccess-Control-Allow-Origin: *, allowing cross-origin requests from any domain. The API accepts GET, POST, and OPTIONS methods.
Output options
Two optional query parameters are available on all endpoints:When
true, the JSON response is formatted with indentation for human readability.When provided, the response is wrapped as a JSONP callback instead of plain JSON. The value must be the name of the JavaScript function to call.
Access control
API access is governed by VuFind’s permission system. The relevant permissions are defined inpermissions.ini:
| Permission | Controls access to |
|---|---|
access.api.Search | GET /api/v1/search |
access.api.Record | GET /api/v1/record |
access.api.admin.cache | DELETE /api/v1/admin/cache |
permissions.ini.
