# update_instalment_plan_templates

Update instalment plan templates by ID. Core fields (name, guarantorRequired, type, and optional academicYear) are
replaced together. External-name translations can be upserted independently by locale: omitted locales remain
unchanged and an empty value clears that locale. Tags can also be set independently; they replace any existing tags
and an empty array clears them. Each template in the batch is updated independently; partial failures are reported
per-item. Phases run in order (core fields, translations, tags); a later failure is reported explicitly but does not
roll earlier phases back. Use list_instalment_plan_templates to discover template IDs first.

<!-- INPUT_BLOCK_START -->

## Input

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `instalmentPlanTemplates` | `UpdateInstalmentPlanTemplateInput[]` | Yes | Array of instalment plan templates to update - [UpdateInstalmentPlanTemplateInput](#updateinstalmentplantemplateinput) |

### UpdateInstalmentPlanTemplateInput

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `string` | Yes | ID of the instalment plan template to update |
| `name` | `string` | No | Human-readable name for the template (max 255 characters) |
| `guarantorRequired` | `boolean` | No | Whether a guarantor is required when using this template |
| `academicYear` | `AcademicYear \| null` | No | Academic year this template applies to. It can only be supplied with name, guarantorRequired, and type; pass null with those fields to clear it, or omit it to preserve the current value. - [AcademicYear](#academicyear) |
| `type` | `PlanType` | No | [PlanType](#plantype) |
| `externalNameTranslations` | `ExternalNameTranslation[]` | No | External-name translations to upsert by locale. Omitted locales remain unchanged; an empty value clears the supplied locale. - [ExternalNameTranslation](#externalnametranslation) |
| `tags` | `string[]` | No | Tag keys to set on the template, replacing any existing tags. Pass an empty array to clear all tags. Use list_tags with entity INSTALMENT_PLAN_TEMPLATE to discover existing keys. |

### PlanType

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `kind` | `PlanTypeKind` | Yes | Plan type discriminator. One of `FULL_PAYMENT`, `CALENDAR_MONTHLY`, or `CUSTOM`. FULL_PAYMENT = one payment; CALENDAR_MONTHLY = monthly instalments; CUSTOM = bespoke schedule requiring `startDate` and `instalments`. - [PlanTypeKind](#plantypekind) |
| `currency` | `string` | No | ISO-4217 currency code the plan is denominated in (e.g. GBP, EUR) |
| `startDate` | `string` | No | Start date of the plan (ISO date). Required when kind is CUSTOM. |
| `instalments` | `CustomInstalment[]` | No | Ordered list of instalments. Required when kind is CUSTOM; percentages must sum to 100. Only the last instalment may have a null `to`. - [CustomInstalment](#custominstalment) |
| `advancedPayments` | `AdvancedPayment[]` | No | Optional advanced payments collected before the regular instalment schedule begins - [AdvancedPayment](#advancedpayment) |

### ExternalNameTranslation

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `locale` | `string` | Yes | BCP 47 locale code for the translation (e.g. en, es, en-GB) |
| `value` | `string` | Yes | Translated external name (max 255 characters). Use an empty string to clear this locale; omit the locale entry entirely to leave it unchanged. |

### CustomInstalment

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `to` | `string \| null` | Yes | End date of the instalment period (ISO date, e.g. 2025-12-31). Pass null on the last instalment only to make it open-ended ("Extend to booking check-out date"); it then runs to the booking's billing end date. |
| `percentage` | `string` | Yes | Percentage of the total due in this instalment, as a decimal string (e.g. "70.25") |

### AdvancedPayment

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `on` | `AdvancedPaymentOn` | Yes | [AdvancedPaymentOn](#advancedpaymenton) |
| `amount` | `AdvancedPaymentAmount` | Yes | [AdvancedPaymentAmount](#advancedpaymentamount) |

### AdvancedPaymentOn

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `kind` | `AdvancedPaymentOnKind` | Yes | Advanced payment trigger kind. One of `IMMEDIATE` or `DAYS_BEFORE_CONTRACT_START`. IMMEDIATE is due on booking; DAYS_BEFORE_CONTRACT_START is due N days before the contract start date. - [AdvancedPaymentOnKind](#advancedpaymentonkind) |
| `days` | `number` | No | Number of days before contract start. Required when kind is DAYS_BEFORE_CONTRACT_START. |

### AdvancedPaymentAmount

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `kind` | `AdvancedPaymentAmountKind` | Yes | Advanced payment amount kind. One of `PERCENTAGE`, `FIXED`, or `MONTHS`. Determines which of `percentage`, `fixedAmount`, or `months` must be populated. - [AdvancedPaymentAmountKind](#advancedpaymentamountkind) |
| `percentage` | `string` | No | Percentage value as a decimal string (e.g. "25.5"). Required when kind is PERCENTAGE. |
| `fixedAmount` | `AdvancedPaymentFixedAmount` | No | Fixed monetary amount. Required when kind is FIXED. - [AdvancedPaymentFixedAmount](#advancedpaymentfixedamount) |
| `months` | `string` | No | Number of months as a decimal string (e.g. "2.5"). Required when kind is MONTHS. |

### AdvancedPaymentFixedAmount

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `amount` | `number` | Yes | Monetary value in the smallest currency unit (e.g. cents/pence) |
| `currency` | `string` | Yes | ISO-4217 currency code (e.g. EUR, GBP, USD) |

### AcademicYear

| Value | Description |
| --- | --- |
| `YEAR_2025_2026` | 2025/26 academic year |
| `YEAR_2026_2027` | 2026/27 academic year |
| `YEAR_2027_2028` | 2027/28 academic year |
| `YEAR_2028_2029` | 2028/29 academic year |
| `YEAR_2029_2030` | 2029/30 academic year |

### PlanTypeKind

| Value | Description |
| --- | --- |
| `FULL_PAYMENT` | A single up-front payment for the full balance |
| `CALENDAR_MONTHLY` | Equal monthly instalments aligned to calendar months |
| `CUSTOM` | Bespoke instalment schedule defined by `startDate` and `instalments` |

### AdvancedPaymentOnKind

| Value | Description |
| --- | --- |
| `IMMEDIATE` | Due immediately on booking |
| `DAYS_BEFORE_CONTRACT_START` | Due N days before the contract start date |

### AdvancedPaymentAmountKind

| Value | Description |
| --- | --- |
| `PERCENTAGE` | Percentage of the total balance |
| `FIXED` | Fixed monetary amount in a specific currency |
| `MONTHS` | Number of months of contract value |

<!-- INPUT_BLOCK_END -->

<!-- OUTPUT_BLOCK_START -->

## Output

| Field | Type | Description |
| --- | --- | --- |
| `content` | `ContentItem[]` | Array of content items returned by the tool - [ContentItem](#contentitem) |
| `isError` | `boolean` | Whether the tool execution resulted in an error |

### ContentItem

| Field | Type | Description |
| --- | --- | --- |
| `type` | `'text'` | Content type (currently only 'text' is supported) |
| `text` | `string` | The text content to display |

<!-- OUTPUT_BLOCK_END -->
