> ## 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.

# Submit EPS manually

> Manually submit an EPS (Employer Payment Summary) to HMRC for a specific tax year



## OpenAPI

````yaml /api-reference/specs/pay-api.yaml post /rti/eps/{taxYear}/manual
openapi: 3.0.3
info:
  title: FlowPayroll API
  description: >-
    API for payroll management, including payroll upload, lock, HMRC submission,
    employee management
  version: 0.1.0
servers:
  - url: https://api.sandbox.flowpayroll.ai/v1
security:
  - XAuthToken: []
    XOrgId: []
tags:
  - name: Employees
    description: >-
      Create, retrieve, update, and delete employee records, and look them up by
      NI number or payroll ID.
  - name: Starters & leavers
    description: Set and clear starter and leaver details, individually or in bulk.
  - name: Tax codes
    description: >-
      Manage employee tax codes and query the effective tax code and NI category
      on a given date.
  - name: NI & identifiers
    description: Manage NI categories, National Insurance numbers, and payroll IDs.
  - name: Student loans
    description: Start and end student and postgraduate loans.
  - name: Payroll setup
    description: Assign an employee's payroll config and set opening balances.
  - name: Payroll
  - name: Payroll lines
  - name: PayrollConfig
  - name: Pay Elements
  - name: Calculator
  - name: Payslip
  - name: RTI
  - name: YearEnd
  - name: Organisation
paths:
  /rti/eps/{taxYear}/manual:
    post:
      tags:
        - RTI
      summary: Submit EPS manually
      description: >-
        Manually submit an EPS (Employer Payment Summary) to HMRC for a specific
        tax year
      operationId: submitEpsManually
      parameters:
        - name: taxYear
          in: path
          required: true
          schema:
            type: integer
            minimum: 1800
            maximum: 3000
          description: The tax year to submit EPS for
        - name: preview
          in: query
          required: false
          schema:
            type: boolean
            default: false
          description: Whether to generate a preview without submitting to HMRC
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SendEpsRequestDto'
      responses:
        '200':
          description: EPS submission preview generated successfully
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/ResponseBody'
                  - type: object
                    properties:
                      data:
                        type: string
                        description: The EPS submission XML preview
                        example: <?xml version="1.0" encoding="UTF-8"?>...
        '202':
          description: EPS submission triggered successfully
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/ResponseBody'
                  - type: object
                    properties:
                      data:
                        $ref: '#/components/schemas/EpsSubmissionEntryDto'
        '400':
          description: Invalid request body or tax year
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseBody'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseBody'
components:
  schemas:
    SendEpsRequestDto:
      type: object
      description: >-
        Generic EPS request - see SendEpsRequestY2025To2026Dto or
        SendEpsRequestY2026To2027Dto for tax-year-specific schemas.
      oneOf:
        - $ref: '#/components/schemas/SendEpsRequestY2025To2026Dto'
        - $ref: '#/components/schemas/SendEpsRequestY2026To2027Dto'
      discriminator:
        propertyName: taxYear
    ResponseBody:
      type: object
      properties:
        message:
          $ref: '#/components/schemas/MessageWithTokenResponse'
        content:
          type: object
          properties:
            data:
              type: object
              nullable: true
            metadata:
              type: object
              nullable: true
              properties:
                dateFormat:
                  type: string
                  default: yyyy-MM-dd
                dateTimeFormat:
                  type: string
                  default: yyyy-MM-ddTHH:mm:ss.fffZ
                paginationToken:
                  type: string
                  nullable: true
        validationIssues:
          type: array
          items:
            $ref: '#/components/schemas/ValidationIssue'
        messageToken:
          type: string
    EpsSubmissionEntryDto:
      type: object
      properties:
        submissionId:
          type: string
          description: The unique submission ID
          example: EPS_2025_001
        taxYear:
          type: integer
          description: The tax year
          example: 2025
        taxMonth:
          type: integer
          description: The tax month (1-12)
          nullable: true
          minimum: 1
          maximum: 12
          example: 6
        organisationId:
          type: string
          description: The organisation ID
          example: org_123
        hmrcEpsReportStatus:
          type: string
          description: The HMRC EPS report status
          enum:
            - NotSent
            - Sending
            - Sent
            - Failed
          example: Sent
        createdDate:
          type: string
          format: date-time
          description: Creation date
          example: '2025-01-01T00:00:00Z'
        createdBy:
          type: string
          description: User who created the record
          example: user_123
        updatedDate:
          type: string
          format: date-time
          description: Last update date
          example: '2025-01-02T00:00:00Z'
        updatedBy:
          type: string
          description: User who last updated the record
          example: user_456
        submissionBody:
          type: string
          description: The submission body
          nullable: true
          example: Submission body content
        correlationID:
          type: string
          description: The correlation ID
          nullable: true
          example: corr_123
        submissionDate:
          type: string
          format: date-time
          description: The submission date
          nullable: true
          example: '2025-01-01T00:00:00Z'
        submissionResponse:
          type: string
          description: The submission response
          nullable: true
          example: Response from HMRC
        errors:
          type: array
          items:
            type: string
          description: List of errors
          nullable: true
          example:
            - Error message 1
            - Error message 2
      required:
        - submissionId
        - taxYear
        - organisationId
        - hmrcEpsReportStatus
        - createdDate
        - createdBy
        - updatedDate
        - updatedBy
    SendEpsRequestY2025To2026Dto:
      type: object
      description: EPS submission request for tax years 2024-25 and 2025-26
      properties:
        taxMonth:
          type: integer
          description: Tax month
          minimum: 1
          maximum: 12
          example: 1
        taxYear:
          type: integer
          description: Tax year (2024 or 2025)
          example: 2025
        finalSubmissionDetails:
          $ref: '#/components/schemas/FinalSubmissionDetailsY2024To2026Dto'
        noPaymentForPeriod:
          $ref: '#/components/schemas/NoPaymentForPeriodDto'
        periodOfInactivity:
          $ref: '#/components/schemas/PeriodOfInactivityDto'
        employmentAllowance:
          $ref: '#/components/schemas/EmploymentAllowanceY2025To2026Dto'
        recoverableAmounts:
          $ref: '#/components/schemas/RecoverableAmountsY2025To2026Dto'
        apprenticeshipLevy:
          $ref: '#/components/schemas/ApprenticeshipLevyDto'
        isPreview:
          type: boolean
          description: Whether this is a preview
          default: false
      required:
        - taxYear
    SendEpsRequestY2026To2027Dto:
      type: object
      description: EPS submission request for tax year 2026-27 onwards
      properties:
        taxMonth:
          type: integer
          description: Tax month
          minimum: 1
          maximum: 12
          example: 1
        taxYear:
          type: integer
          description: Tax year (2026 onwards)
          example: 2026
        finalSubmissionDetails:
          $ref: '#/components/schemas/FinalSubmissionDetailsY2024To2026Dto'
        noPaymentForPeriod:
          $ref: '#/components/schemas/NoPaymentForPeriodDto'
        periodOfInactivity:
          $ref: '#/components/schemas/PeriodOfInactivityDto'
        employmentAllowance:
          $ref: '#/components/schemas/EmploymentAllowanceY2026To2027Dto'
        recoverableAmounts:
          $ref: '#/components/schemas/RecoverableAmountsY2026To2027Dto'
        apprenticeshipLevy:
          $ref: '#/components/schemas/ApprenticeshipLevyDto'
        isPreview:
          type: boolean
          description: Whether this is a preview
          default: false
      required:
        - taxYear
    MessageWithTokenResponse:
      type: object
      properties:
        text:
          type: string
        token:
          type: string
        tokenArguments:
          type: array
          items:
            $ref: '#/components/schemas/ValidationIssueArgument'
    ValidationIssue:
      type: object
      description: >
        Field validation item. `reasonToken` is a stable snake_case key for i18n
        or custom client messages; `reason` is the default English text from the
        API.
      properties:
        field:
          type: string
          description: Dot-path of the field (e.g. name.firstName, address.line1).
        reason:
          type: string
          description: Default human-readable message.
        reasonToken:
          type: string
          description: Machine-readable error identifier (snake_case).
        reasonTokenArguments:
          type: array
          nullable: true
          items:
            $ref: '#/components/schemas/ValidationIssueArgument'
    FinalSubmissionDetailsY2024To2026Dto:
      type: object
      description: Final submission details for tax years 2024/2025 and 2025/2026
      properties:
        becauseSchemeCeased:
          type: boolean
          nullable: true
          description: Indicates if the scheme has ceased
          example: true
        dateSchemeCeased:
          type: string
          nullable: true
          format: date
          description: 'The date when the scheme ceased (format: yyyy-MM-dd)'
          example: '2024-04-05'
        forYear:
          type: boolean
          nullable: true
          description: Indicates if this is the final submission for the tax year
          example: true
    NoPaymentForPeriodDto:
      type: object
      properties:
        fromDate:
          type: string
          format: date
          description: From date
          example: '2025-01-01'
        toDate:
          type: string
          format: date
          description: To date
          example: '2025-01-31'
      required:
        - fromDate
        - toDate
    PeriodOfInactivityDto:
      type: object
      properties:
        fromDate:
          type: string
          format: date
          description: From date
          example: '2025-01-01'
        toDate:
          type: string
          format: date
          description: To date
          example: '2025-01-31'
      required:
        - fromDate
        - toDate
    EmploymentAllowanceY2025To2026Dto:
      type: object
      description: >-
        Employment allowance with De Minimis State Aid sectors (tax years before
        2026-27)
      properties:
        isEnabled:
          type: boolean
          description: Whether employment allowance is enabled
          example: true
        employerSectors:
          type: array
          items:
            type: string
            enum:
              - Agriculture
              - FisheriesAndAquaculture
              - RoadTransport
              - Industry
              - NA
          description: Employer sectors for De Minimis State Aid
          nullable: true
          example:
            - Agriculture
            - Industry
      required:
        - isEnabled
    RecoverableAmountsY2025To2026Dto:
      type: object
      description: Recoverable amounts for tax years 2024-25 and 2025-26
      properties:
        taxMonth:
          type: integer
          minimum: 1
          maximum: 12
          example: 1
        smpRecovered:
          $ref: '#/components/schemas/StatutoryPaymentsReclaimDto'
        sppRecovered:
          $ref: '#/components/schemas/StatutoryPaymentsReclaimDto'
        sapRecovered:
          $ref: '#/components/schemas/StatutoryPaymentsReclaimDto'
        shPPRecovered:
          $ref: '#/components/schemas/StatutoryPaymentsReclaimDto'
        spbpRecovered:
          $ref: '#/components/schemas/StatutoryPaymentsReclaimDto'
        sncpRecovered:
          $ref: '#/components/schemas/StatutoryPaymentsReclaimDto'
        cisDeductionsSuffered:
          type: number
          format: decimal
          description: CIS deductions suffered
          example: 50
      required:
        - taxMonth
        - cisDeductionsSuffered
    ApprenticeshipLevyDto:
      type: object
      properties:
        levyDueYtd:
          type: number
          format: decimal
          description: Levy due year to date
          example: 1000
        taxMonth:
          type: integer
          description: Tax month
          minimum: 1
          maximum: 12
          example: 1
        annualAllowance:
          type: number
          format: decimal
          description: Annual allowance
          example: 15000
      required:
        - levyDueYtd
        - taxMonth
        - annualAllowance
    EmploymentAllowanceY2026To2027Dto:
      type: object
      description: Employment allowance for 2026-27 onwards (no De Minimis State Aid)
      properties:
        isEnabled:
          type: boolean
          description: Whether employment allowance is enabled
          example: true
      required:
        - isEnabled
    RecoverableAmountsY2026To2027Dto:
      type: object
      description: >-
        Recoverable amounts for tax year 2026-27 onwards (includes Northern
        Ireland SPBP)
      properties:
        taxMonth:
          type: integer
          minimum: 1
          maximum: 12
          example: 1
        smpRecovered:
          $ref: '#/components/schemas/StatutoryPaymentsReclaimDto'
        sppRecovered:
          $ref: '#/components/schemas/StatutoryPaymentsReclaimDto'
        sapRecovered:
          $ref: '#/components/schemas/StatutoryPaymentsReclaimDto'
        shPPRecovered:
          $ref: '#/components/schemas/StatutoryPaymentsReclaimDto'
        spbpRecovered:
          $ref: '#/components/schemas/StatutoryPaymentsReclaimDto'
        spbpRecoveredInNorthernIreland:
          $ref: '#/components/schemas/StatutoryPaymentsReclaimDto'
        sncpRecovered:
          $ref: '#/components/schemas/StatutoryPaymentsReclaimDto'
        cisDeductionsSuffered:
          type: number
          format: decimal
          description: CIS deductions suffered
          example: 50
      required:
        - taxMonth
        - cisDeductionsSuffered
    ValidationIssueArgument:
      type: object
      properties:
        name:
          type: string
        value:
          type: string
    StatutoryPaymentsReclaimDto:
      type: object
      properties:
        reclaimed:
          type: number
          format: decimal
          description: Amount reclaimed this tax year
          example: 100
        nicCompensationRecovered:
          type: number
          format: decimal
          description: National Insurance contribution compensation recovered this tax year
          example: 50
      required:
        - reclaimed
        - nicCompensationRecovered
  securitySchemes:
    XAuthToken:
      type: apiKey
      in: header
      name: X-Auth-Token
      description: Access token obtained from OAuth2 client credentials flow
    XOrgId:
      type: apiKey
      in: header
      name: X-Org-Id
      description: >-
        Organisation to scope the request to. Required when the principal can
        access more than one organisation; optional for single-organisation
        principals (the authorizer resolves it automatically).

````