Update Invoice
whmcs_update_invoiceUpdate an existing invoice's status, payment method, dates, or notes to maintain accurate billing records.
Instructions
Update an existing invoice
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| invoiceid | Yes | Invoice ID to update | |
| status | No | New status | |
| paymentmethod | No | Payment method | |
| date | No | Invoice date (YYYY-MM-DD) | |
| duedate | No | Due date (YYYY-MM-DD) | |
| notes | No | Invoice notes | |
| publish | No | Publish draft invoice | |
| publishandsendemail | No | Publish and send email |
Implementation Reference
- src/index.ts:325-347 (registration)Registration of the 'whmcs_update_invoice' tool with MCP server. Defines the tool name, input schema (invoiceid required; optional: status, paymentmethod, date, duedate, notes, publish, publishandsendemail), and the handler that delegates to whmcsClient.updateInvoice().
server.registerTool( 'whmcs_update_invoice', { title: 'Update Invoice', description: 'Update an existing invoice', inputSchema: { invoiceid: z.number().describe('Invoice ID to update'), status: z.enum(['Draft', 'Unpaid', 'Paid', 'Cancelled', 'Refunded', 'Collections']).optional().describe('New status'), paymentmethod: z.string().optional().describe('Payment method'), date: z.string().optional().describe('Invoice date (YYYY-MM-DD)'), duedate: z.string().optional().describe('Due date (YYYY-MM-DD)'), notes: z.string().optional().describe('Invoice notes'), publish: z.boolean().optional().describe('Publish draft invoice'), publishandsendemail: z.boolean().optional().describe('Publish and send email'), }, }, async (params) => { const result = await whmcsClient.updateInvoice(params); return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }], }; } ); - src/index.ts:341-346 (handler)The inline handler function for 'whmcs_update_invoice'. It calls whmcsClient.updateInvoice(params) and returns the JSON-stringified result.
async (params) => { const result = await whmcsClient.updateInvoice(params); return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }], }; } - src/index.ts:330-340 (schema)Input schema (Zod) for whmcs_update_invoice: invoiceid (required number), and optional fields: status (enum Draft/Unpaid/Paid/Cancelled/Refunded/Collections), paymentmethod, date, duedate, notes, publish, publishandsendemail.
inputSchema: { invoiceid: z.number().describe('Invoice ID to update'), status: z.enum(['Draft', 'Unpaid', 'Paid', 'Cancelled', 'Refunded', 'Collections']).optional().describe('New status'), paymentmethod: z.string().optional().describe('Payment method'), date: z.string().optional().describe('Invoice date (YYYY-MM-DD)'), duedate: z.string().optional().describe('Due date (YYYY-MM-DD)'), notes: z.string().optional().describe('Invoice notes'), publish: z.boolean().optional().describe('Publish draft invoice'), publishandsendemail: z.boolean().optional().describe('Publish and send email'), }, }, - src/whmcs-client.ts:527-550 (helper)The updateInvoice() method on WhmcsApiClient. Maps the tool's parameters to the WHMCS API 'UpdateInvoice' action. Accepts all invoice fields including invoiceid, status, paymentmethod, taxrate, date, duedate, notes, item arrays, deletelineids, publish, and publishandsendemail.
* Update an invoice */ async updateInvoice(params: { invoiceid: number; status?: 'Draft' | 'Unpaid' | 'Paid' | 'Cancelled' | 'Refunded' | 'Collections'; paymentmethod?: string; taxrate?: number; taxrate2?: number; date?: string; duedate?: string; datepaid?: string; notes?: string; itemdescription?: string[]; itemamount?: number[]; itemtaxed?: boolean[]; newitemdescription?: string[]; newitemamount?: number[]; newitemtaxed?: boolean[]; deletelineids?: number[]; publish?: boolean; publishandsendemail?: boolean; }) { return this.call<WhmcsApiResponse & { invoiceid: number }>('UpdateInvoice', params); }