Enrol employee in pension scheme
Records an employee’s enrolment in the workplace pension scheme. Use this to record auto-enrolment triggered by eligibility assessment, voluntary opt-in by a non-eligible jobholder, or a worker choosing to join. If a membership record does not yet exist, one is created automatically. Returns 409 if the employee is already actively enrolled — use the opt-out endpoint first if re-enrolment is needed after a status change.
Authorizations
Get token from Auth0 and paste it here
Body
Request to enrol an employee in the pension scheme.
Use to record auto-enrolment, voluntary opt-in, or a worker joining the scheme. If no scheme_id is provided, the organisation's current active scheme is used. Optional rate override fields allow setting per-employee rates at enrolment time; null values fall back to scheme defaults.
Date on which enrolment takes effect
How the employee entered the scheme (AUTO_ENROLLED, OPTED_IN, JOINED)
AUTO_ENROLLED, OPTED_IN, JOINED Worker category determined at the time of enrolment
ELIGIBLE_JOBHOLDER, NON_ELIGIBLE_JOBHOLDER, ENTITLED_WORKER, EXCLUDED Date the statutory enrolment communication was issued to the employee. Required to validate the statutory one-month opt-out window.
Pension scheme to enrol into. Stored as provided; not auto-resolved on auto-enrolment — the auto-enrol path stamps the org default scheme at enrolment time.
Employee contribution rate override (null = use scheme default)
0 <= x <= 1Employer contribution rate override (null = use scheme default)
0 <= x <= 1Per-period employee contribution cap override
x >= 0Per-period employer contribution cap override
x >= 0Per-employee tax treatment override (e.g. RAS when scheme is salary sacrifice)
NET_PAY, RELIEF_AT_SOURCE, SALARY_SACRIFICE Wage type code for pension deduction; 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