actualbudget/actual · error · Error

No fields to update. Use --name to specify a new name.

Error message

No fields to update. Use --name to specify a new name.

What it means

The `payees update <id>` command in the Actual CLI requires at least one field to change. It builds a `fields` object from options (currently only `--name`), and if no options were supplied there is nothing to send to the API, so the command throws this error instead of issuing an empty update.

Source

Thrown at packages/cli/src/commands/payees.ts:64

      await withConnection(
        opts,
        async () => {
          const id = await api.createPayee({ name: cmdOpts.name });
          printOutput({ id }, opts.format);
        },
        { mutates: true },
      );
    });

  payees
    .command('update <id>')
    .description('Update a payee')
    .option('--name <name>', 'New payee name')
    .action(async (id: string, cmdOpts) => {
      const fields: Record<string, unknown> = {};
      if (cmdOpts.name) fields.name = cmdOpts.name;
      if (Object.keys(fields).length === 0) {
        throw new Error(
          'No fields to update. Use --name to specify a new name.',
        );
      }
      const opts = program.opts();
      await withConnection(
        opts,
        async () => {
          await api.updatePayee(id, fields);
          printOutput({ success: true, id }, opts.format);
        },
        { mutates: true },
      );
    });

  payees
    .command('delete <id>')
    .description('Delete a payee')
    .action(async (id: string) => {

View on GitHub (pinned to d4334cb6e6)

Solutions

  1. Add the `--name <newname>` option to the payees update command.
  2. If scripting, verify the variable holding the new name is non-empty before invoking the CLI.
  3. If you only wanted to look up a payee, use the `payees get`/`list` command instead of `update`.

Example fix

// before
$ actual-cli payees update 8f2c...
// after
$ actual-cli payees update 8f2c... --name "Grocery Store"
Defensive patterns

Strategy: validation

Validate before calling

if (!name || name.trim() === '') {
  throw new Error('payees update requires a non-empty --name');
}

Try / catch

try {
  await cli(['payees', 'update', id, '--name', name]);
} catch (e) {
  if (e.message.includes('No fields to update')) {
    console.error('Provide --name when updating a payee');
  }
}

Prevention

When it happens

Trigger: Running `actual-cli payees update <id>` without any of the supported field flags (e.g. missing `--name`), or passing flags whose values are empty/falsy so they are not added to `fields`.

Common situations: Scripting bulk payee renames where one invocation forgot the `--name` flag; renaming payees interactively and typing only the ID; a CI script templating `--name` with an empty variable so the flag value is an empty string.

Understand the failure class

Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.

Related errors


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