actualbudget/actual · error

results.error

Error message

results.error

What it means

If the 'pluggyai-accounts' response carries an 'error' field instead of an error_code, it is thrown directly as the error message. This handles generic/unstructured Pluggy.ai proxy failures.

Source

Thrown at packages/desktop-client/src/components/banksync/useBuiltInBankSyncProviders.ts:504

    isEnableBankingSetupComplete,
    onEnableBankingInit,
    t,
    upgradingAccountId,
  ]);

  const onConnectPluggyAi = useCallback(async () => {
    if (!pluggyAiStatus.configured) {
      onPluggyAiInit();
      return;
    }

    try {
      const results = await send('pluggyai-accounts');
      if (results.error_code) {
        throw new Error(results.reason);
      }
      if ('error' in results) {
        throw new Error(results.error);
      }

      const externalAccounts = (results.accounts as PluggyAiAccount[]).map(
        oldAccount => ({
          account_id: oldAccount.id,
          name: `${oldAccount.name.trim()} - ${
            oldAccount.type === 'BANK' ? oldAccount.taxNumber : oldAccount.owner
          }`,
          institution: oldAccount.name,
          orgDomain: null,
          orgId: oldAccount.id,
          balance:
            oldAccount.type === 'BANK'
              ? oldAccount.bankData.automaticallyInvestedBalance +
                oldAccount.bankData.closingBalance
              : oldAccount.balance,
        }),
      );

View on GitHub (pinned to d4334cb6e6)

Solutions

  1. Read the thrown message (results.error) and the sync-server logs to identify the Pluggy.ai failure
  2. Re-authenticate Pluggy.ai credentials in provider settings
  3. Retry after confirming Pluggy.ai status (status.outage incidents)
  4. Check that the stored clientId/secret correspond to a valid Pluggy.ai account
Defensive patterns

Strategy: try-catch

Validate before calling

const res = await send('pluggyai-accounts');
if ('error' in res && res.error) {
  throw new Error(res.error);
}

Type guard

const hasErrorField = (r: object): r is { error: string } =>
  'error' in r && typeof (r as { error?: unknown }).error === 'string';

Try / catch

try {
  await loadPluggyAiAccounts();
} catch (e) {
  logger.error('Pluggy.ai proxy error', e);
  notify('Pluggy.ai account fetch failed; see server logs.');
}

Prevention

When it happens

Trigger: The 'pluggyai-accounts' IPC returns { error: '...' } with no error_code — typically an exception message or HTTP error body captured by the sync server while calling Pluggy.ai.

Common situations: Pluggy.ai 5xx responses; server-side exception during account listing; credentials present but the Pluggy item/session cannot be created.

Related errors


AI-assisted analysis of actualbudget/actual@d4334cb6e6 (2026-08-29). Data as JSON: /api/errors/dfb986150b0d61db. Report an issue: GitHub.