Mintplex-Labs/anything-llm · error

${response.error || "Failed to update settings"}

Error message

${response.error || "Failed to update settings"}

What it means

Thrown from `updateSettings` on a non-ok `POST /api/community-hub/settings`. Reads `response.error` from the parsed JSON body (correct pattern), falling back to 'Failed to update settings'. Typically a 400/422 when the submitted connection key is malformed, or 401 for non-admin sessions.

Source

Thrown at frontend/src/models/communityHub.js:86

        };
      });
  },

  /**
   * Update the hub settings (API key, etc.)
   * @param {Object} data - The data to update.
   * @returns {Promise<{success: boolean, error: string | null}>}
   */
  updateSettings: async (data) => {
    return await fetch(`${API_BASE}/community-hub/settings`, {
      method: "POST",
      headers: baseHeaders(),
      body: JSON.stringify(data),
    })
      .then(async (res) => {
        const response = await res.json();
        if (!res.ok)
          throw new Error(response.error || "Failed to update settings");
        return { success: true, error: null };
      })
      .catch((e) => ({
        success: false,
        error: e.message,
      }));
  },

  /**
   * Get the hub settings (API key, etc.)
   * @returns {Promise<{connectionKey: string | null, error: string | null}>}
   */
  getSettings: async () => {
    return await fetch(`${API_BASE}/community-hub/settings`, {
      method: "GET",
      headers: baseHeaders(),
    })
      .then(async (res) => {

View on GitHub (pinned to 526360e320)

Solutions

  1. Trim/validate the connection key client-side before posting.
  2. Read `error` from the returned `{ success, error }` for the precise reason.
  3. On 401 re-authenticate; on 422 fix per the server message.
  4. Confirm the key matches the hub's expected format/length.

Example fix

// before
await CommunityHub.updateSettings({ connectionKey: rawKey });

// after
const key = String(rawKey).trim();
if (!key) throw new Error('Connection key is required');
const { success, error } = await CommunityHub.updateSettings({ connectionKey: key });
if (!success) throw new Error(error || 'Failed to update settings');
Defensive patterns

Strategy: validation

Validate before calling

function validateSettingsPayload(data) {
  if (!data || typeof data !== 'object') throw new Error('Settings payload is required');
  if ('connectionKey' in data && typeof data.connectionKey !== 'string') {
    throw new Error('connectionKey must be a string');
  }
  if ('connectionKey' in data && !data.connectionKey.trim()) {
    throw new Error('connectionKey cannot be empty');
  }
}

Type guard

function isSettingsPayload(v) {
  return !!v && typeof v === 'object' && (!('connectionKey' in v) || typeof v.connectionKey === 'string');
}

Try / catch

const { success, error } = await CommunityHub.updateSettings(data);
if (!success) showToast(error || 'Failed to update settings');

Prevention

When it happens

Trigger: Submitting an empty or invalid connection key; key fails server-side format validation (422); 401 expired/ non-admin session; 500 backend persistence failure.

Common situations: User pastes a key with stray whitespace or wrong format; session expires before saving; backend settings store write error.

Related errors


AI-assisted analysis of Mintplex-Labs/anything-llm@526360e320 (2026-08-13). Data as JSON: /api/errors/8aa90952ef9bad8e. Report an issue: GitHub.