Submit a pending employee contribution change request for contribution percentage changes and salary sacrifice preference

Add MCP server to your AI tool

Allow AI tools and LLMs to interact with the API documentation portal through MCP.

MCP server URL

https://docs.getpenfold.dev/mcp

Standard setup for AI tools providing an mcp.json file

mcp.json
{
  "Penfold Payroll API v4 MCP server": {
    "url": "https://docs.getpenfold.dev/mcp"
  }
}

Close
POST /employers/{employer_id}/employees/{employee_id}/contribution_change_requests

Submit a pending employee contribution change request for contribution percentage changes and salary sacrifice preference. You may request salary sacrifice opt-out via salary_sacrifice_enabled: false. There is no separate read endpoint — poll GET .../employees/{employee_id} for current contribution percentages.

Path parameters

  • employer_id string Required
  • employee_id string Required
application/json

Body Required

  • employee_contributions_percent number

    Requested employee contribution percentage (0–100).

    Minimum value is 0, maximum value is 100.

  • salary_sacrifice_enabled boolean

    When true, request salary sacrifice opt-in; when false, request opt-out.

Responses

  • 201 application/json

    Contribution change request created.

    Hide response attributes Show response attributes object
    • id string Required

      Unique identifier for the contribution change request.

    • employee_contributions_percent_from number | null

      Previous employee contribution percentage when a percentage change was requested. null when no percentage change was requested (not the same as 0).

      Minimum value is 0, maximum value is 100.

    • employee_contributions_percent_to number | null

      Requested employee contribution percentage when a percentage change was requested. null when no percentage change was requested (not the same as 0).

      Minimum value is 0, maximum value is 100.

    • salary_sacrifice_enabled boolean | null

      Requested salary sacrifice state when a change was requested (true opt-in, false opt-out).

    • created_at string(date-time) Required

      When the request was created (ISO 8601 UTC).

    • updated_at string(date-time) Required

      When the request was last updated (ISO 8601 UTC).

  • 400 application/json

    Bad request, the request is malformed or contains invalid data.

    Hide response attributes Show response attributes object
    • error string

      A descriptive error message.

    • validation_errors array[object]
      Hide validation_errors attributes Show validation_errors attributes object
      • field string Required

        The name of the field that failed validation.

      • message string Required

        A descriptive error message.

  • 401 application/json

    Unauthorized.

    Hide response attribute Show response attribute object
    • error string

      A descriptive error message.

  • 404 application/json

    Employee or employer not found.

    Hide response attribute Show response attribute object
    • error string

      A descriptive error message.

POST /employers/{employer_id}/employees/{employee_id}/contribution_change_requests
curl \
 --request POST 'https://payroll-api.getpenfold.dev/v4/employers/{employer_id}/employees/{employee_id}/contribution_change_requests' \
 --header "Authorization: Bearer $ACCESS_TOKEN" \
 --header "Content-Type: application/json" \
 --data '{
  "employee_contributions_percent": 42.0,
  "salary_sacrifice_enabled": true
}'
Request examples
{
  "employee_contributions_percent": 42.0,
  "salary_sacrifice_enabled": true
}
Response examples (201)
{
  "id": "string",
  "employee_contributions_percent_from": 42.0,
  "employee_contributions_percent_to": 42.0,
  "salary_sacrifice_enabled": true,
  "created_at": "2026-05-04T09:42:00Z",
  "updated_at": "2026-05-04T09:42:00Z"
}
Response examples (400)
{
  "error": "Bad request: invalid data provided.",
  "validation_errors": [
    {
      "field": "email",
      "message": "Email address is invalid."
    }
  ]
}
Response examples (401)
{
  "error": "Bad request: invalid data provided."
}
Response examples (404)
{
  "error": "Bad request: invalid data provided."
}