update_scheduled_transaction
Modify scheduled transactions in YNAB to adjust amounts, dates, payees, categories, or frequencies for recurring financial events.
Instructions
[1 API call] Update an existing scheduled transaction
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| budget_id | No | Budget ID or 'last-used' | last-used |
| scheduled_transaction_id | Yes | The scheduled transaction ID | |
| account_id | Yes | Account ID (required even if unchanged) | |
| date | Yes | Date (YYYY-MM-DD, required even if unchanged) | |
| amount | No | New amount in dollars | |
| frequency | No | New frequency | |
| payee_id | No | New payee ID | |
| payee_name | No | New payee name | |
| category_id | No | New category ID | |
| memo | No | New memo | |
| flag_color | No | New flag color |
Implementation Reference
- src/tools/scheduled-transactions.ts:119-134 (registration)The tool `update_scheduled_transaction` is registered here with its input schema definition.
server.registerTool("update_scheduled_transaction", { title: "Update Scheduled Transaction", description: "[1 API call] Update an existing scheduled transaction", inputSchema: { budget_id: z.string().default("last-used").describe("Budget ID or 'last-used'"), scheduled_transaction_id: z.string().describe("The scheduled transaction ID"), account_id: z.string().describe("Account ID (required even if unchanged)"), date: z.string().describe("Date (YYYY-MM-DD, required even if unchanged)"), amount: z.number().optional().describe("New amount in dollars"), frequency: z.enum(FREQUENCIES).optional().describe("New frequency"), 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"), flag_color: z.enum(FLAG_COLORS).optional().describe("New flag color"), }, - The handler function for `update_scheduled_transaction` that executes the update logic via the YNAB client.
}, async ({ budget_id, scheduled_transaction_id, account_id, date, amount, frequency, payee_id, payee_name, category_id, memo, flag_color }) => { try { const response = await getClient().scheduledTransactions.updateScheduledTransaction( budget_id, scheduled_transaction_id, { scheduled_transaction: { account_id, date, amount: amount != null ? dollarsToMilliunits(amount) : undefined, frequency, payee_id, payee_name, category_id, memo, flag_color: flag_color ?? null, }, } ); const t = response.data.scheduled_transaction; return textResult( `Updated scheduled transaction: ${t.date_first} | ${formatCurrency(t.amount)} | ${t.frequency}\nID: ${t.id}` ); } catch (e: any) { return errorResult(e.message); } });