Update per-employee pension rates
Update an employee’s per-employee pension contribution rates. Creates a new membership history version effective from the specified valid_from date. Override rates must be >= the scheme minimums (HMRC AE compliance). If tax_treatment is overridden, wage_type_code must also be provided.
Authorizations
Get token from Auth0 and paste it here
Body
Request to update per-employee pension contribution rates.
Creates a new membership history version effective from valid_from. Standard PATCH semantics:
- Field omitted from the request body → carry forward the current value unchanged.
- Field explicitly set to null → clear the override (fall back to scheme default).
- Field set to a value → apply as the new override.
Effective date of the rate change
Employee contribution rate override
0 <= x <= 1Employer contribution rate override
0 <= x <= 1Per-period employee contribution cap override
x >= 0Per-period employer contribution cap override
x >= 0Per-employee tax treatment override
NET_PAY, RELIEF_AT_SOURCE, SALARY_SACRIFICE Wage type code; MUST be provided when tax_treatment is set
Response
Successful Response
Current pension membership state for an employee.
Reflects the latest (highest version) membership history record. Per-employee rate override fields (employee_rate, employer_rate, etc.) are null when the scheme defaults apply; non-null values take precedence over the scheme.
Date from which this version of the membership record is effective
Current membership status: ACTIVE (enrolled, contributions calculated), OPTED_OUT (left the scheme; contributions refunded if within 1-month opt-out window), NOT_ENROLLED (no active membership)
ACTIVE, OPTED_OUT, NOT_ENROLLED Sequential version number of this membership record; starts at 0, incremented on each change (status change, rate update, etc.)
AE worker category at enrolment time: ELIGIBLE_JOBHOLDER (age 22–SPA, earnings ≥ trigger — employer must enrol), NON_ELIGIBLE_JOBHOLDER (outside age/earnings band — can opt in), ENTITLED_WORKER (earnings below lower limit — can join, employer need not contribute), EXCLUDED (not subject to AE). Null if not yet enrolled
ELIGIBLE_JOBHOLDER, NON_ELIGIBLE_JOBHOLDER, ENTITLED_WORKER, EXCLUDED How the employee entered the scheme: AUTO_ENROLLED (system enrolled automatically at payroll approval), OPTED_IN (employee requested enrolment), JOINED (entitled worker chose to join). Null if not enrolled
AUTO_ENROLLED, OPTED_IN, JOINED Date on which the membership became ACTIVE; null if not yet enrolled
Date the employee opted out; null if not opted out
Date the statutory enrolment letter was issued to the employee; used to validate the 1-month opt-out window
UUID of the pension scheme the employee is enrolled in; null for legacy memberships created before multi-scheme support (engine falls back to the org's default scheme)
Timestamp when this version of the membership record was created
User identifier who created this version; null if created by the system (e.g. auto-enrolment)
Date on which this version expires (exclusive); null = current version. Set automatically when a new version is created
Per-employee employee contribution rate override; null = use scheme default
^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$Per-employee employer contribution rate override; null = use scheme default
^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$Per-employee maximum employee contribution per period; null = use scheme default
^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$Per-employee maximum employer contribution per period; null = use scheme default
^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$Per-employee tax treatment override (e.g. RELIEF_AT_SOURCE for an employee whose scheme is SALARY_SACRIFICE); null = use scheme default
NET_PAY, RELIEF_AT_SOURCE, SALARY_SACRIFICE Per-employee wage type code override for the payslip deduction line; null = use scheme default. Required when tax_treatment override is set