update_transactions
Update multiple YNAB transactions in bulk by providing transaction IDs and new details like amounts, categories, or cleared status.
Instructions
[1 API call, bulk] Update multiple transactions at once. Each must include either id or import_id to identify the transaction.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| budget_id | No | Budget ID or 'last-used' | last-used |
| transactions | Yes | Transactions to update |
Implementation Reference
- src/tools/transactions.ts:219-239 (registration)Registration of the "update_transactions" tool with input schema validation.
server.registerTool("update_transactions", { title: "Bulk Update Transactions", description: "[1 API call, bulk] Update multiple transactions at once. Each must include either id or import_id to identify the transaction.", inputSchema: { budget_id: z.string().default("last-used").describe("Budget ID or 'last-used'"), transactions: z.array(z.object({ id: z.string().optional().describe("Transaction ID"), import_id: z.string().optional().describe("Import ID"), account_id: z.string().optional(), date: z.string().optional(), amount: z.number().optional().describe("Amount in dollars"), payee_id: z.string().optional(), payee_name: z.string().optional(), category_id: z.string().optional(), memo: z.string().optional(), cleared: z.enum(CLEARED_VALUES).optional(), approved: z.boolean().optional(), flag_color: z.enum(FLAG_COLORS).optional(), })).describe("Transactions to update"), }, annotations: { readOnlyHint: false }, - src/tools/transactions.ts:240-254 (handler)Handler logic for the "update_transactions" tool, performing a bulk update on YNAB transactions.
}, async ({ budget_id, transactions }) => { try { const response = await getClient().transactions.updateTransactions(budget_id, { transactions: transactions.map((t) => ({ ...t, amount: t.amount != null ? dollarsToMilliunits(t.amount) : undefined, flag_color: t.flag_color ?? null, })), }); const updated = response.data.transactions; return textResult(`Updated ${updated?.length ?? 0} transaction(s).`); } catch (e: any) { return errorResult(e.message); } });