Creates a new employer under your organisation.
The company number is validated against Companies House. If an employer
with the same company number already exists in your organisation, a 409
is returned with the existing employer's externalReference.
Onboarding lifecycle
Employer creation triggers an onboarding process:
- AwaitingAgreement — Employer record created, company validated against Companies House. The employer must complete onboarding on Penfold's platform (sign agreement, AML/KYB verification).
- Pending — Onboarding complete, awaiting first payroll submission.
- Active — First payroll processed. Employer is fully operational.
Poll GET /employers or GET /employers/{employerId} to track
status progression. The employer cannot process payroll until
status is Active.
Body
Required
-
Companies House registration number
-
Registered company name
-
Email address of the primary contact at the employer
-
Full name of the primary contact at the employer
-
Role of the primary contact at the employer
Values are
CompanyDirector,Finance,HR, orPayrollManager. -
Full name of a company director. Required for AML verification.
-
Date of birth of the company director (YYYY-MM-DD). Required for AML verification.
-
How often the employer runs payroll
Values are
Weekly,Fortnightly,FourWeekly, orMonthly. -
Expected start date of the first pay period (YYYY-MM-DD)
-
Expected cadence for pay periods
Values are
Weekly,Fortnightly,FourWeekly, orMonthly. -
Default employee contribution percentage
Minimum value is
0, maximum value is100. -
Default employer contribution percentage
Minimum value is
0, maximum value is100. -
Basis on which pension contributions are calculated
Values are
QualifyingEarnings,TotalPay, orBasicPay. -
Whether the employer allows salary sacrifice arrangements
Default value is
false. -
How the employer will pay pension contributions
Value is
BankTransfer. -
Approximate number of employees to be enrolled
Minimum value is
1.
curl \
--request POST 'https://partner-api.getpenfold.com/v1/employers' \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header "Content-Type: application/json" \
--data '{"companyName":"Acme Ltd","directorName":"John Smith","companyNumber":"12345678","paymentMethod":"BankTransfer","contributionBasis":"QualifyingEarnings","numberOfEmployees":50,"payrollFrequencies":["Monthly"],"primaryContactName":"Jane Smith","primaryContactRole":"PayrollManager","directorDateOfBirth":"1980-05-15","primaryContactEmail":"payroll@acme.com","allowsSalarySacrifice":false,"expectedPayPeriodCadence":"Monthly","expectedFirstPayPeriodStartDate":"2025-03-01","defaultEmployeeContributionsPercent":5,"defaultEmployerContributionsPercent":3}'
{
"companyName": "Acme Ltd",
"directorName": "John Smith",
"companyNumber": "12345678",
"paymentMethod": "BankTransfer",
"contributionBasis": "QualifyingEarnings",
"numberOfEmployees": 50,
"payrollFrequencies": [
"Monthly"
],
"primaryContactName": "Jane Smith",
"primaryContactRole": "PayrollManager",
"directorDateOfBirth": "1980-05-15",
"primaryContactEmail": "payroll@acme.com",
"allowsSalarySacrifice": false,
"expectedPayPeriodCadence": "Monthly",
"expectedFirstPayPeriodStartDate": "2025-03-01",
"defaultEmployeeContributionsPercent": 5,
"defaultEmployerContributionsPercent": 3
}
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"name": "Acme Ltd",
"status": "AwaitingAgreement",
"createdAt": "2025-03-01T10:00:00Z",
"companyNumber": "12345678",
"paymentMethod": "BankTransfer",
"contributionBasis": "QualifyingEarnings",
"externalReference": "PEN12345678",
"allowsSalarySacrifice": false,
"defaultEmployeeContributionsPercent": 5,
"defaultEmployerContributionsPercent": 3
}
{
"error": "validation failed",
"validationErrors": [
{
"field": "companyNumber",
"message": "companyNumber is required"
},
{
"field": "primaryContactEmail",
"message": "must be a valid email address"
}
]
}
{
"error": "unauthorized"
}
{
"error": "company not found in Companies House"
}
{
"error": "employer already exists",
"externalReference": "PEN12345678"
}
{
"error": "internal server error"
}