---
updatedAt: 2026-09-25T15:11:39.000Z
agentTools:
  projectIndex: https://docs.checkhq.com/llms.txt
---

# Generating Paystubs

Generating paystubs for your employees

Paystubs are used by employees to understand their pay and often serve as proof of income. They are also subject to a patchwork of state-by-state compliance regulations.

Check provides a paystubs endpoint for each employee that makes compliance and rendering easy. [List employee paystubs](https://docs.checkhq.com/reference/get-an-employees-paystubs) returns the employee's paystubs in no guaranteed order, in the standard paginated response type, and [Get a paystub](https://docs.checkhq.com/reference/get-a-paystub) returns an employee's paystub for a single payroll, and can return as JSON or rendered as a PDF.

## When paystubs are available

Paystubs become available as soon as a payroll is approved. Approval moves the payroll to `pending` and saves its calculated taxes, net pay, and benefits (see [Life of a Payroll](https://docs.checkhq.com/docs/life-of-a-payroll#pending)). From then on you can list or retrieve an employee's paystub, as JSON or PDF, while the payroll is `pending`, `processing`, `paid`, or `partially_paid`. You don't need to wait for the payroll to reach `paid`. Draft payrolls, which haven't been approved, don't have paystubs.

The `status` filter on [List employee paystubs](https://docs.checkhq.com/reference/get-an-employees-paystubs) accepts `pending`.

## Paystub PDF

To return a Check-designed paystub as a PDF, make a request to the [Get a paystub](https://docs.checkhq.com/reference/get-a-paystub) endpoint with the HTTP header `Accept: application/pdf`. Check will return a fully rendered paystub for the employee. Note that the Check logo on a paystub can be easily replaced with a partner’s logo.

```
GET /employees/<employee_id>/paystubs/<payroll_id>
```

**Note: State regulations generally require that all of the information in the paystub JSON response is rendered and the paystub is printable. Directly rendering a singular paystub to PDF will satisfy this requirement.**

## Paystub JSON

You can also retrieve paystub data in a JSON format, if you want to provide a completely customized paystub for your companies and employees.

Make a request to the [Get a paystub](https://docs.checkhq.com/reference/get-a-paystub) endpoint with the HTTP header `Accept: application/json` to retrieve all data used to render a paystub in JSON format.

Example request:

```shell Paystub request
curl https://sandbox.checkhq.com/employees/emp_MRQDxt1J4mrz4HZ4XwMx/paystubs/pay_bpp9oycVBI6GHT008a8G
  -H 'Content-Type: application/pdf'
```

Example response:

```json Paystub response
{
   "payroll": "pay_904CPnfvRvNLo9Itg44Q",
   "payday": "2021-05-21",
   "period_start": "2021-04-24",
   "period_end": "2021-05-07",
   "company": {
       "trade_name": "Stark Industries",
       "legal_name": "Stark Industries, Inc.",
       "address": {
           "line1": "200 Park Ave",
           "line2": null,
           "city": "New York",
           "state": "NY",
           "postal_code": "10166",
           "country": "US"
       },
       "phone": "5558675309"
   },
   "void_of": null,
   "voided_by": null,
   "employee": {
       "first_name": "Tony",
       "middle_name": null,
       "last_name": "Stark",
       "residence": {
           "line1": "630 Bedford Road",
           "line2": null,
           "city": "Tarrytown",
           "state": "NY",
           "postal_code": "10591",
           "country": "US"
       },
       "ssn_last_four": null
   },
   "earnings": [
       {
           "type": "Regular",
           "code": null,
           "earning_code": null,
           "amount": "5384.61",
           "amount_ytd": "5384.61",
           "hours": "40.00",
           "hours_ytd": "40.00",
           "name": "Regular",
           "current_earnings": [
               {
                   "description": "Regular",
                   "amount": "5384.61",
                   "hours": "40.00",
                   "workplace": "wrk_aj8gIXWZ6HelAcx18Ppw",
                   "rate": "134.615"
               }
           ]
       }
   ],
   "reimbursements": [
       {
           "code": null,
           "amount": "123.43",
           "amount_ytd": "123.43",
           "current_reimbursements": [
               {
                   "description": "Office supplies",
                   "amount": "123.43"
               }
           ]
       }
   ],
   "employee_taxes": [
       {
           "amount": "333.85",
           "amount_ytd": "333.85",
           "description": "FICA"
       },
       {
           "amount": "920.65",
           "amount_ytd": "920.65",
           "description": "Federal Income Tax"
       },
       {
           "amount": "78.08",
           "amount_ytd": "78.08",
           "description": "Medicare"
       },
       {
           "amount": "27.52",
           "amount_ytd": "27.52",
           "description": "New York Family Leave Benefits"
       },
       {
           "amount": "1.20",
           "amount_ytd": "1.20",
           "description": "New York SDI"
       },
       {
           "amount": "313.36",
           "amount_ytd": "313.36",
           "description": "New York State Tax"
       }
   ],
   "company_taxes": [
       {
           "amount": "333.85",
           "amount_ytd": "333.85",
           "description": "Employer FICA Tax"
       },
       {
           "amount": "32.31",
           "amount_ytd": "32.31",
           "description": "Federal Unemployment Tax"
       },
       {
           "amount": "78.08",
           "amount_ytd": "78.08",
           "description": "Employer Medicare Tax"
       },
       {
           "amount": "168.27",
           "amount_ytd": "168.27",
           "description": "New York State Unemployment Tax"
       },
       {
           "amount": "4.04",
           "amount_ytd": "4.04",
           "description": "New York Reemployment Fund"
       }
   ],
   "employee_benefit_contributions": [
       {
           "benefit": "401k",
           "description": "401k Benefit",
           "amount": "107.69",
           "amount_ytd": "107.69"
       }
   ],
   "company_benefit_contributions": [
       {
           "benefit": "401k",
           "description": "401k Benefit",
           "amount": "50.00",
           "amount_ytd": "50.00"
       }
   ],
   "post_tax_deductions": [
       {
           "type": "miscellaneous",
           "description": "Coffee Money",
           "calculation_method": "amount",
           "amount": "50.00",
           "amount_ytd": "50.00"
       },
       {
           "type": "child_support",
           "description": "Child Support",
           "calculation_method": "amount",
           "amount": "100.0",
           "amount_ytd": "100.00",
         	 "agency": "CO",
         	 "external_id": "12345678"
       }
   ],
   "summary": {
       "earnings": "5384.61",
       "earnings_ytd": "5384.61",
       "reimbursements": "123.43",
       "reimbursements_ytd": "123.43",
       "employee_taxes": "1674.66",
       "employee_taxes_ytd": "1674.66",
       "company_taxes": "616.55",
       "company_taxes_ytd": "616.55",
       "employee_benefit_contributions": "107.69",
       "employee_benefit_contributions_ytd": "107.69",
       "company_benefit_contributions": "50.00",
       "company_benefit_contributions_ytd": "50.00",
       "post_tax_deductions": "50.00",
       "post_tax_deductions_ytd": "50.00",
       "net_pay": "3675.69",
       "net_pay_ytd": "3675.69"
   },
   "total_hours": "40.00",
   "time_off_balances": {
       "pto_balance_hours": null,
       "sick_balance_hours": null,
       "state_covid_sick_balance_hours": null
   },
   "payment_method": "manual",
   "paystub_info": {}
}
```

You may also fetch all paystub data for a specific employee in JSON format with the [List employee paystubs](https://docs.checkhq.com/reference/get-an-employees-paystubs) endpoint. The order of the results is not guaranteed. To read a pay history in payday order, request a date window with the `start` and `end` query parameters, page through the full window, and sort the collected results by `payday`.

```
GET /employees/<employee_id>/paystubs
```

## Customizing Paystub Info

If you want to return custom information on the paystub PDF or in the paystub JSON, you can use the `paystub_info` object on [Payroll Items](https://docs.checkhq.com/reference/the-payroll-item-object). This object allows you to define arbitrary key, value pairs that get returned on both the PDF and JSON paystub responses. You can add up to 15 keys, and a total of 500 characters (the total length of all keys and values) with `paystub_info` on a given payroll item.

If provided, `paystub_info` is displayed on paystub PDFs under the **Pay summary** pane on the right side. For example:

<Image align="center" src="https://files.readme.io/d406b1a8767f90510d7735933eb99aa31c842e9a385ae95b143d76dd04934ac1-Screenshot_2025-05-23_at_5.00.07_PM.png" />