> ## Documentation Index
> Fetch the complete documentation index at: https://docs.flowpayroll.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Set a contribution override for one pay period

> Sets the contribution for the addressed pay period only, replacing the group settings and any standing association override for that period (additional voluntary contributions stay additive on top). Idempotent: repeating the call replaces the override. The automatic enrolment minimum binds per pay reference period, so a below-minimum override needs acknowledgeBelowAutoEnrolmentMinimum. The employee must be in a pension group. Applies to open pay runs only; the period's payslip is re-processed automatically.



## OpenAPI

````yaml /api-reference/specs/pension-v2.json put /employee-pension/{employeeId}/contribution-overrides/{taxYear}/{period}
openapi: 3.0.4
info:
  title: FlowPayroll Pension API
  version: v2
servers:
  - url: https://api.sandbox.flowpayroll.ai/v2/pension
security: []
tags:
  - name: Pension providers
    description: >-
      Look up the pension providers available to your organisation. Providers
      are set up in the product, so the API exposes them read-only.
  - name: Pension schemes
    description: >-
      Your organisation's arrangements with providers. Scheme endpoints use the
      /pension-schema path.
  - name: Pension groups
    description: >-
      Contribution rule sets within a scheme: pension type, contribution basis,
      and employee and employer factors.
  - name: Employee enrolment
    description: >-
      Associate employees with pension groups, remove associations, and send
      enrolment letters.
  - name: Pension information
    description: >-
      An employee's full pension picture in one call: composition, latest
      assessment, and postponement.
  - name: Auto-enrolment
    description: >-
      Assessment results per pay run, employees with outstanding or no
      auto-enrolment, and a stateless assessment preview.
  - name: Postponement
    description: Defer auto-enrolment per employee, overriding the organisation defaults.
  - name: Organisation defaults
    description: >-
      The organisation's default pension group, postponement definitions, and
      auto-enrolment mode.
  - name: Pension calculations
    description: >-
      Per-period contribution amounts, the contributions CSV, and provider
      export files.
  - name: Provider submissions
    description: >-
      Send a completed pay run to its connected pension provider, approve the
      payment, and read back what the provider reported: opt-outs, stopped
      contributions, refunds and schedules.
paths:
  /employee-pension/{employeeId}/contribution-overrides/{taxYear}/{period}:
    put:
      tags:
        - ContributionOverride
      summary: Set a contribution override for one pay period
      description: >-
        Sets the contribution for the addressed pay period only, replacing the
        group settings and any standing association override for that period
        (additional voluntary contributions stay additive on top). Idempotent:
        repeating the call replaces the override. The automatic enrolment
        minimum binds per pay reference period, so a below-minimum override
        needs acknowledgeBelowAutoEnrolmentMinimum. The employee must be in a
        pension group. Applies to open pay runs only; the period's payslip is
        re-processed automatically.
      operationId: PutContributionOverride
      parameters:
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
        - name: taxYear
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: period
          in: path
          required: true
          schema:
            type: integer
            format: int32
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PutContributionOverrideRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContributionOverrideModelResponseBody'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ObjectResponseBody'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ObjectResponseBody'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ObjectResponseBody'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ObjectResponseBody'
components:
  schemas:
    PutContributionOverrideRequest:
      required:
        - contributionOverride
      type: object
      properties:
        contributionOverride:
          $ref: '#/components/schemas/ContributionOverrideValuesModel'
        acknowledgeBelowAutoEnrolmentMinimum:
          type: boolean
          description: >-
            Confirms the period is deliberately below the automatic enrolment

            minimum, which binds per pay reference period (at least 8% of

            qualifying earnings in total with at least 3% from the employer;
            fixed

            amounts cannot meet it). Without it such an override is rejected.
      additionalProperties: false
    ContributionOverrideModelResponseBody:
      required:
        - message
      type: object
      properties:
        message:
          $ref: '#/components/schemas/MessageWithTokenResponse'
        content:
          $ref: '#/components/schemas/ContributionOverrideModelContentResponse'
        validationIssues:
          type: array
          items:
            $ref: '#/components/schemas/ValidationIssue'
          nullable: true
        errors:
          type: array
          items:
            $ref: '#/components/schemas/Error'
          description: >-
            Deprecated: the same issues as `validationIssues` (`reasonText` is
            `reason`, `reasonId` is `reasonToken`, `reasonParameters` is
            `reasonTokenArguments`). Read `validationIssues`; this will be
            removed.
          nullable: true
          readOnly: true
          deprecated: true
        metadata:
          allOf:
            - $ref: '#/components/schemas/ContentMetadataResponse'
          description: >-
            Deprecated: the same values as `content.metadata`. Read that; this
            will be removed.
          deprecated: true
      additionalProperties: false
      description: >-
        The response envelope every FlowPayroll API answers with: a `message`,
        the

        `content`, and any `validationIssues`. `errors` and the top-level

        `metadata` are deprecated copies of `validationIssues` and

        `content.metadata`, and will be removed.
    ObjectResponseBody:
      required:
        - message
      type: object
      properties:
        message:
          $ref: '#/components/schemas/MessageWithTokenResponse'
        content:
          $ref: '#/components/schemas/ObjectContentResponse'
        validationIssues:
          type: array
          items:
            $ref: '#/components/schemas/ValidationIssue'
          nullable: true
        errors:
          type: array
          items:
            $ref: '#/components/schemas/Error'
          description: >-
            Deprecated: the same issues as `validationIssues` (`reasonText` is
            `reason`, `reasonId` is `reasonToken`, `reasonParameters` is
            `reasonTokenArguments`). Read `validationIssues`; this will be
            removed.
          nullable: true
          readOnly: true
          deprecated: true
        metadata:
          allOf:
            - $ref: '#/components/schemas/ContentMetadataResponse'
          description: >-
            Deprecated: the same values as `content.metadata`. Read that; this
            will be removed.
          deprecated: true
      additionalProperties: false
      description: >-
        The response envelope every FlowPayroll API answers with: a `message`,
        the

        `content`, and any `validationIssues`. `errors` and the top-level

        `metadata` are deprecated copies of `validationIssues` and

        `content.metadata`, and will be removed.
    ContributionOverrideValuesModel:
      required:
        - contributionType
      type: object
      properties:
        contributionType:
          enum:
            - Percentage
            - FixedAmount
          type: string
          nullable: true
        employeeFactor:
          type: number
          format: float
          nullable: true
        employerFactor:
          type: number
          format: float
          nullable: true
        employeeFixedAmount:
          type: number
          format: double
          nullable: true
        employerFixedAmount:
          type: number
          format: double
          nullable: true
      additionalProperties: false
      description: >-
        Per-employee contribution override. When present on an association it
        fully

        replaces the pension group's contribution settings.
    MessageWithTokenResponse:
      required:
        - token
      type: object
      properties:
        text:
          type: string
          nullable: true
        token:
          type: string
          description: >-
            Stable snake_case key for the message, for clients that translate
            it.
          nullable: true
        tokenArguments:
          type: array
          items:
            $ref: '#/components/schemas/ValidationIssueArgument'
          nullable: true
        textId:
          type: string
          description: >-
            Deprecated: the same value as `token`. Read that; this will be
            removed.
          nullable: true
          readOnly: true
          deprecated: true
        textParameters:
          type: array
          items:
            $ref: '#/components/schemas/Pair'
          description: >-
            Deprecated: the same values as `tokenArguments`. Read that; this
            will be removed.
          nullable: true
          readOnly: true
          deprecated: true
      additionalProperties: false
      description: >-
        What happened, as English `text` and a stable `token` to translate from.

        `textId` and `textParameters` are deprecated copies of `token` and
        `tokenArguments`.
    ContributionOverrideModelContentResponse:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/ContributionOverrideModel'
        metadata:
          $ref: '#/components/schemas/ContentMetadataResponse'
      additionalProperties: false
    ValidationIssue:
      type: object
      properties:
        field:
          type: string
          nullable: true
        reason:
          type: string
          nullable: true
        reasonToken:
          type: string
          nullable: true
        reasonTokenArguments:
          type: array
          items:
            $ref: '#/components/schemas/ValidationIssueArgument'
          nullable: true
      additionalProperties: false
    Error:
      type: object
      properties:
        field:
          type: string
          nullable: true
        reasonText:
          type: string
          nullable: true
        reasonId:
          type: string
          nullable: true
        reasonParameters:
          type: array
          items:
            $ref: '#/components/schemas/Pair'
          nullable: true
      additionalProperties: false
      description: >-
        Deprecated: an entry of the old `errors` list. Read `validationIssues`
        instead.
      deprecated: true
    ContentMetadataResponse:
      type: object
      properties:
        dateFormat:
          type: string
          nullable: true
        dateTimeFormat:
          type: string
          nullable: true
        paginationToken:
          type: string
          nullable: true
      additionalProperties: false
    ObjectContentResponse:
      type: object
      properties:
        data:
          nullable: true
        metadata:
          $ref: '#/components/schemas/ContentMetadataResponse'
      additionalProperties: false
    ValidationIssueArgument:
      type: object
      properties:
        name:
          type: string
          nullable: true
        value:
          nullable: true
      additionalProperties: false
    Pair:
      type: object
      properties:
        key:
          type: string
          nullable: true
        value:
          type: string
          nullable: true
      additionalProperties: false
      description: >-
        Deprecated: a key and value of the old `textParameters` and
        `reasonParameters`.
      deprecated: true
    ContributionOverrideModel:
      required:
        - contributionOverride
        - createdBy
        - createdDate
        - employeeId
        - period
        - taxYear
        - updatedBy
        - updatedDate
      type: object
      properties:
        employeeId:
          type: string
          nullable: true
        taxYear:
          type: integer
          description: The tax year the pay period belongs to (e.g. 2026 for 2026/27).
          format: int32
        period:
          type: integer
          description: The pay period number within the tax year.
          format: int32
        contributionOverride:
          $ref: '#/components/schemas/ContributionOverrideValuesModel'
        createdBy:
          type: string
          nullable: true
        createdDate:
          type: string
          format: date-time
        updatedBy:
          type: string
          nullable: true
        updatedDate:
          type: string
          format: date-time
      additionalProperties: false
      description: >-
        A contribution override for one pay period only: for that period it

        replaces the group settings and any standing association override, then

        expires. Additional voluntary contributions stay additive on top of it.
        At most one per employee per pay

        period; a repeated PUT replaces it.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.