update_transaction
Modify existing YNAB transaction details like amount, date, payee, category, or status to correct errors or reflect changes in your budget.
Instructions
[1 API call] Update an existing transaction
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| budget_id | No | Budget ID or 'last-used' | last-used |
| transaction_id | Yes | The transaction ID to update | |
| account_id | No | New account ID | |
| date | No | New date (YYYY-MM-DD) | |
| amount | No | New amount in dollars | |
| payee_id | No | New payee ID | |
| payee_name | No | New payee name | |
| category_id | No | New category ID | |
| memo | No | New memo | |
| cleared | No | New cleared status | |
| approved | No | New approval status | |
| flag_color | No | New flag color |
Implementation Reference
- src/tools/transactions.ts:184-217 (handler)Registration and implementation of the 'update_transaction' MCP tool.
server.registerTool("update_transaction", { title: "Update Transaction", description: "[1 API call] Update an existing transaction", inputSchema: { budget_id: z.string().default("last-used").describe("Budget ID or 'last-used'"), transaction_id: z.string().describe("The transaction ID to update"), account_id: z.string().optional().describe("New account ID"), date: z.string().optional().describe("New date (YYYY-MM-DD)"), amount: z.number().optional().describe("New amount in dollars"), payee_id: z.string().optional().describe("New payee ID"), payee_name: z.string().optional().describe("New payee name"), category_id: z.string().optional().describe("New category ID"), memo: z.string().optional().describe("New memo"), cleared: z.enum(CLEARED_VALUES).optional().describe("New cleared status"), approved: z.boolean().optional().describe("New approval status"), flag_color: z.enum(FLAG_COLORS).optional().describe("New flag color"), }, annotations: { readOnlyHint: false }, }, async ({ budget_id, transaction_id, ...fields }) => { try { const data: any = { ...fields }; if (data.amount != null) data.amount = dollarsToMilliunits(data.amount); if (data.flag_color !== undefined) data.flag_color = data.flag_color ?? null; const response = await getClient().transactions.updateTransaction(budget_id, transaction_id, { transaction: data, }); const t = response.data.transaction; return textResult( `Updated transaction: ${t.date} | ${formatCurrency(t.amount)} | ${t.payee_name ?? "No payee"}\nID: ${t.id}` ); } catch (e: any) { return errorResult(e.message); } });