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

# Create Employee Check

> Create a new payroll check for a W-2 employee by submitting shifts, a reporting period, and a check date.

Employee checks are the core payroll object in Zeal. Each check represents a single payment to a W-2 employee and contains the shifts (units of work and earnings) that determine gross pay, tax withholding, and net disbursement. See the [Reporting Period Object](/reference/employee-checks/reporting-periods/reporting-period-object) and [Shift Object](/reference/employee-checks/shifts/shift-object) for the objects this endpoint references.


## OpenAPI

````yaml openapi/employee-checks.json post /employeeCheck
openapi: 3.1.0
info:
  title: zeal-api
  version: '1.0'
servers:
  - url: https://api.zeal.com
security:
  - sec0: []
paths:
  /employeeCheck:
    post:
      summary: Create Employee Check
      description: Create a check for an employee.
      operationId: create-employee-check
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - companyID
                - employeeID
                - reportingPeriodID
                - check_date
                - shifts
              properties:
                companyID:
                  type: string
                  description: Company ID of the employer
                employeeID:
                  type: string
                  description: Employee ID of the employee
                reportingPeriodID:
                  type: string
                  description: >-
                    The reporting period ID that you want this employee check to
                    belong to. See [Reporting Periods](ref:reporting-periods)
                check_date:
                  type: string
                  description: >-
                    Check date for this employee check. If the check_date falls
                    on a weekend/bank holiday, or the current time is after 2PM
                    PST, two days before the check_date, adjust the `check_date`
                    to the next valid business day. Zeal will not roll forward
                    this date automatically.
                  format: date
                approval_required:
                  type: boolean
                  description: >-
                    Set to true if this check requires manual approval by the
                    employer. Otherwise, by default, Zeal will automatically
                    process the check on the day before the check date. You can
                    approve the check either in the dashboard, or by using
                    [update check](ref:update-employee-check)
                  default: false
                disbursement:
                  type: object
                  description: >-
                    This object includes information regarding how the net pay
                    is disbursed to the employee. Zeal supports Direct Deposit,
                    Download Check, Physical Check, Prepaid, Instant Pay and
                    Paycard (Early Access) disbursement methods.
                  properties:
                    method:
                      type: string
                      description: >-
                        The method of disbursement. There are 6 options:
                        `direct_deposit` (Zeal will make a direct deposit to the
                        employee's bank account), `download_check` (Zeal will
                        give you the link to a PDF version of the check),
                        `physical_check` (Zeal will send a physical check to the
                        employee's home address on file), `prepaid` (Zeal will
                        *not* disburse the net pay), `paycard` (Zeal will
                        instantly transfer funds to the existing paycard), and
                        `instant_pay` (Zeal will send funds to the existing
                        worker's Instant Pay wallet)
                      default: direct_deposit
                      enum:
                        - direct_deposit
                        - download_check
                        - physical_check
                        - prepaid
                        - paycard
                        - instant_pay
                shifts:
                  type: array
                  description: >-
                    Array of shift objects. The set of shifts attached to this
                    employee check describe the work done and the earnings owed
                    to this employee. You can only create shifts by creating an
                    employee check (through this endpoint). However, you can
                    edit and delete shifts that are still pending. Also supports
                    various earning components as objects. See [Shift
                    Object](ref:shift-object) for more information.
                  items:
                    properties:
                      time:
                        type: string
                        description: ISO-8601 indicating when the shift was completed
                        format: date-time
                      hourly:
                        type: object
                        required:
                          - hours
                        properties:
                          hours:
                            type: number
                            description: Number of regular hours worked in this shift
                            default: 0
                            format: float
                          wage:
                            type: number
                            description: >-
                              Wage for this employee. If not provided, Zeal uses
                              employee's default_wage
                            default: 0
                            format: float
                          custom_name:
                            type: string
                            description: Custom name to be attached to an earning component
                    required:
                      - time
                    type: object
                flsa_ot_recommendation:
                  type: boolean
                  description: >-
                    If set to true, we will automatically convert the check to
                    include our OT recommendation at the time of processing  
                    **NOTE: Only applicable for FLSA Overtime Policy**
                  default: false
                speed:
                  type: string
                  description: >-
                    The ACH speed of the check, accepts `two_day`,
                    `one_day`,`one_day_no_reserve`, or `zero_day_no_reserve` as
                    values
                  default: two_day
                  enum:
                    - two_day
                    - one_day
                    - one_day_no_reserve
                    - zero_day_no_reserve
                apply_employee_deductions:
                  type: boolean
                  description: >-
                    Applies a deduction to this check for each employee
                    deduction template that is effective at the time of the
                    check_date for the employee
                  default: false
                metadata:
                  type: object
                  description: >-
                    Custom object you can attach to the employee check object.
                    This is useful for storing additional information about the
                    object in a custom, structured format. Individual keys can
                    be unset by posting an empty value to them. All keys can be
                    unset by posting an empty value to metadata.
                    [Metadata](ref:metadata)
                  properties: {}
            examples:
              Request Example:
                value:
                  approval_required: true
                  disbursement:
                    method: direct_deposit
                  shifts:
                    - hourly:
                        hours: 20
                        wage: 30
                      time: '2022-02-10'
                  reportingPeriodID: 61d5533c8fc6b7af3bfc2ff3
                  check_date: '2022-02-15'
                  companyID: fc235f012bae46aa8a082f347715bcfa
                  employeeID: 62547a2228a58200241e2b42
      responses:
        '200':
          description: '200'
          content:
            application/json:
              examples:
                Result:
                  value:
                    success: true
                    data:
                      employeeCheckID: '9827465739'
                      employerCheckID: null
                      companyID: 1b5n28nrideucd24
                      employeeID: '1234567890'
                      status: pending
                      is_salary: false
                      first_name: erlich
                      middle_initial: null
                      last_name: bachman
                      reportingPeriodID: '0982349584387523234'
                      check_date: '2020-01-07'
                      approval_required: true
                      approved: false
                      metadata:
                        checkCorrelationID: '1'
                      disbursement:
                        method: direct_deposit
                      disbursement_status: pending
                      gross_pay: 40
                      net_pay: null
                      taxes: null
                      total_employer_taxes: null
                      total_employee_taxes: null
                      totals:
                        gross_earnings: 0
                        gross_pay: 40
                        net_pay: 0
                        employer_taxes: 0
                        employee_taxes: 0
                        employee_deductions: 0
                        employee_garnishments: 0
                        employer_deductions: 0
                        company_debit: 0
                        company_cash_requirement: 0
                      shifts:
                        - employeeID: '1234567890'
                          shiftID: '123456789'
                          first_name: erlich
                          last_name: bachman
                          metadata: {}
                          time: '2019-12-12T10:00:00'
                          hourly:
                            hours: 2
                            wage: 20
                      currency: USD
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                    default: true
                  data:
                    type: object
                    properties:
                      employeeCheckID:
                        type: string
                        example: '9827465739'
                      employerCheckID: {}
                      companyID:
                        type: string
                        example: 1b5n28nrideucd24
                      employeeID:
                        type: string
                        example: '1234567890'
                      status:
                        type: string
                        example: pending
                      is_salary:
                        type: boolean
                        example: false
                        default: true
                      first_name:
                        type: string
                        example: erlich
                      middle_initial: {}
                      last_name:
                        type: string
                        example: bachman
                      reportingPeriodID:
                        type: string
                        example: '0982349584387523234'
                      check_date:
                        type: string
                        example: '2020-01-07'
                      approval_required:
                        type: boolean
                        example: true
                        default: true
                      approved:
                        type: boolean
                        example: false
                        default: true
                      metadata:
                        type: object
                        properties:
                          checkCorrelationID:
                            type: string
                            example: '1'
                      currency:
                        type: string
                        description: >-
                          Currency of the employee check. `USD` for US payroll
                          or `CAD` for Canadian payroll. **NOTE: `CAD` is only
                          applicable for Canadian Payroll (Early Access)**
                        enum:
                          - USD
                          - CAD
                      disbursement:
                        type: object
                        properties:
                          method:
                            type: string
                            example: direct_deposit
                      disbursement_status:
                        type: string
                        example: pending
                      gross_pay:
                        type: integer
                        example: 40
                        default: 0
                      net_pay: {}
                      taxes: {}
                      total_employer_taxes: {}
                      total_employee_taxes: {}
                      totals:
                        type: object
                        properties:
                          gross_earnings:
                            type: integer
                            example: 0
                            default: 0
                          gross_pay:
                            type: integer
                            example: 40
                            default: 0
                          net_pay:
                            type: integer
                            example: 0
                            default: 0
                          employer_taxes:
                            type: integer
                            example: 0
                            default: 0
                          employee_taxes:
                            type: integer
                            example: 0
                            default: 0
                          employee_deductions:
                            type: integer
                            example: 0
                            default: 0
                          employee_garnishments:
                            type: integer
                            example: 0
                            default: 0
                          employer_deductions:
                            type: integer
                            example: 0
                            default: 0
                          company_debit:
                            type: integer
                            example: 0
                            default: 0
                          company_cash_requirement:
                            type: integer
                            example: 0
                            default: 0
                      shifts:
                        type: array
                        items:
                          type: object
                          properties:
                            employeeID:
                              type: string
                              example: '1234567890'
                            shiftID:
                              type: string
                              example: '123456789'
                            first_name:
                              type: string
                              example: erlich
                            last_name:
                              type: string
                              example: bachman
                            metadata:
                              type: object
                              properties: {}
                            time:
                              type: string
                              example: '2019-12-12T10:00:00'
                            updatedAt:
                              type: string
                              format: date-time
                              example: '2024-01-21T21:29:42Z'
                            hourly:
                              type: object
                              properties:
                                hours:
                                  type: integer
                                  example: 2
                                  default: 0
                                wage:
                                  type: integer
                                  example: 20
                                  default: 0
        '400':
          description: '400'
          content:
            text/plain:
              examples:
                Result:
                  value: |-
                    {
                        "success": false,
                        "errors": [
                            {
                                "message": "Employee Check for this employee and check date already exists. Please choose another check date or add shifts to the existing check.",
                                "code": 32
                            }
                        ]
                    }
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: false
                    default: true
                  errors:
                    type: array
                    items:
                      type: object
                      properties:
                        message:
                          type: string
                          example: >-
                            Employee Check for this employee and check date
                            already exists. Please choose another check date or
                            add shifts to the existing check.
                        code:
                          type: integer
                          example: 32
                          default: 0
      deprecated: false
components:
  securitySchemes:
    sec0:
      type: apiKey
      in: header
      name: Authorization
      x-bearer-format: bearer

````