Mintplex-Labs/anything-llm · error · Error
Error generating api key.
Error message
Error generating api key.
What it means
Thrown by generateApiKey in the AnythingLLM frontend when POST /api/system/generate-api-key responds non-2xx. The message is res.statusText with a fallback string — statusText is often just 'Internal Server Error' or empty behind some proxies, so the generic text frequently is what you see. The route inserts a new API key row, so failures are usually database-side.
Source
Thrown at frontend/src/models/system.js:570
if (!res.ok) {
throw new Error(res.statusText || "Error fetching api key.");
}
return res.json();
})
.catch((e) => {
console.error(e);
return { apiKey: null, error: e.message };
});
},
generateApiKey: async function (data = {}) {
return fetch(`${API_BASE}/system/generate-api-key`, {
method: "POST",
headers: baseHeaders(),
body: JSON.stringify(data),
})
.then((res) => {
if (!res.ok) {
throw new Error(res.statusText || "Error generating api key.");
}
return res.json();
})
.catch((e) => {
console.error(e);
return { apiKey: null, error: e.message };
});
},
deleteApiKey: async function (apiKeyId = "") {
return fetch(`${API_BASE}/system/api-key/${apiKeyId}`, {
method: "DELETE",
headers: baseHeaders(),
})
.then((res) => res.ok)
.catch((e) => {
console.error(e);
return false;
});View on GitHub (pinned to 3aec848f28)
Solutions
- Check server logs for the actual 500 cause (database connection, missing table).
- Run pending database migrations after upgrading the server.
- Re-login if the request returned 401, then retry generation.
- If statusText came back empty through a proxy, correlate with the status code in the Network tab.
Defensive patterns
Strategy: try-catch
Try / catch
const { apiKey, error } = await System.generateApiKey(data);
if (!apiKey) {
// error is statusText or 'Error generating api key.' — server logs hold the cause
showApiKeyError(error);
return;
} Prevention
- Run database migrations after every server upgrade so the api_keys table exists.
- Keep an eye on DB connectivity (locked SQLite files during backups) when generation suddenly fails.
- Do not parse the message for specifics — log the HTTP status alongside it.
When it happens
Trigger: Database unreachable or locked when inserting the key row (500); missing api_keys table because migrations were not run after an upgrade; expired/invalid auth token (401); a reverse proxy returning an empty statusText.
Common situations: SQLite database file locked by a concurrent backup; container upgraded without running migrations; long-lived session that expired between page load and the click.
Related errors
- Could not validate login.
- Error uploading pfp.
- Error uploading logo.
- data.message || "Error creating slash command preset."
- data.message || "Could not update slash command preset."
AI-assisted analysis of Mintplex-Labs/anything-llm@3aec848f28 (2026-08-18).
Data as JSON: /api/errors/17260accd9fb5cd3.
Report an issue: GitHub.