---
updatedAt: 2026-11-08T22:10:07.000Z
agentTools:
  projectIndex: https://docs.checkhq.com/llms.txt
---

# Contractor Tax Statements

Learn how to use Check's Contractor Tax Statements API to track contractors' 1099-NEC documents, including publication status and delivery, and how to preview or download them.

<Callout icon="🚧" theme="warn">
  ### Drafts only

  The Contractor Tax Statements API is generally available, but Check does not publish contractor tax statements in production yet. Every production statement is a `draft`, so `document`, `published_at`, and `delivery_method` are null. You can preview a statement's 1099-NEC through a [tax package](https://docs.checkhq.com/docs/tax-packages-guide).
</Callout>

## Overview

The Contractor Tax Statements API shows the 1099-NEC Check will publish, or has published, for each contractor at a company. It works like the [Employee Tax Statements](https://docs.checkhq.com/docs/employee-tax-statements) API, and differs in these ways:

1. **1099-NEC only**: every contractor tax statement is a 1099-NEC, so the object has no `form` field and the list has no `form` filter.
2. **Amendments are identified by `amends`**: a corrected 1099-NEC is also a 1099-NEC, so there is no separate form type for amendments. A statement with a non-null `amends` is an amendment. The original's `amended_by` stays null until the amendment is published.
3. **No filings or refresh time**: the object has no `filings` or `refreshed_at` fields.
4. **Delivery is set at publish**: `delivery_method` is null while a statement is a draft. Check sets it when the statement is published, and clears it again if the statement is unpublished.
5. **Paginated list**: the list endpoint returns a paginated response, and requires a `contractor` or `company` filter.
6. **Contractor scopes**: the API requires an API key with the `contractor:read`, `contractor:write`, or `contractor:admin` scope, and returns `404` unless contractor tax statements are enabled for your account.

## Key concepts

### Contractor Tax Statements

A contractor's 1099-NEC for one company and one tax year. A statement shows:

* Whether the 1099-NEC is still a draft, has been published, or is on hold
* When it was published
* How Check decided to deliver it
* Which statement it amends, or which statement amends it

### Documents

The published 1099-NEC PDF. A statement's `document` is null until the statement is published, then holds the ID of a [contractor tax document](https://docs.checkhq.com/reference/get-a-contractor-tax-document).

### Tax Packages

ZIP files containing tax documents as PDFs. A package requested with at least one contractor tax statement also contains a CSV of that statement data. See the [Tax Packages](https://docs.checkhq.com/docs/tax-packages-guide) guide for details.

## API Reference

### Contractor Tax Statement Object

The core object representing a contractor's 1099-NEC.

| **field**            | **type**                     | **description**                                                                                                         |
| -------------------- | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| `id`                 | ID                           | ID of the contractor tax statement. Begins with `cts_`.                                                                 |
| `contractor`         | ID                           | ID of the contractor this statement belongs to.                                                                         |
| `company`            | ID                           | ID of the company this statement belongs to.                                                                            |
| `year`               | int                          | Tax year for this statement.                                                                                            |
| `document`           | **nullable** ID              | Published document ID (null until the statement is published).                                                          |
| `published_at`       | **nullable** datetime in UTC | When the statement was published to the contractor (UTC). Null until the statement is published.                        |
| `amends`             | **nullable** ID              | Previous statement this one amends (if applicable). If populated, this statement is an amendment.                       |
| `amended_by`         | **nullable** ID              | Newer statement that amends this one (if applicable). Null until the amendment is published.                            |
| `publication_status` | enum                         | Publication status: `draft`, `published`, or `pending_correction` (held by Check and not published).                    |
| `delivery_method`    | **nullable** enum            | Delivery method Check decided when it published the statement: `manual` or `mail`. Null while the statement is a draft. |
| `mail_recipient`     | **nullable** enum            | Mail recipient: `contractor` or `company`. Null when `delivery_method` is `manual` or null.                             |

**Key Point:** When `document` is null, the statement hasn't been published yet. You can generate a preview of the 1099-NEC by creating a [tax package](https://docs.checkhq.com/docs/tax-packages-guide).

`delivery_method` records the delivery decision Check made at publish time. A `mail` value does not by itself mean Check has mailed the 1099-NEC.

### List Contractor Tax Statements

`GET /contractor_tax_statements`

Returns the contractor tax statements matching the specified filters. You must pass `contractor`, `company`, or both. A request with neither returns a `400` validation error.

#### Query Parameters

| **parameter**        | **type**            | **description**                                                                                                |
| -------------------- | ------------------- | -------------------------------------------------------------------------------------------------------------- |
| `contractor`         | ID                  | Filter by contractor ID. Required unless `company` is set.                                                     |
| `company`            | ID                  | Filter by company ID. Required unless `contractor` is set.                                                     |
| `year`               | int (optional)      | Filter by tax year                                                                                             |
| `publication_status` | enum (optional)     | Filter by publication status: `draft`, `published`, or `pending_correction`. `draft` excludes held statements. |
| `type`               | enum (optional)     | Filter by type: `original` or `amendment`                                                                      |
| `published_from`     | datetime (optional) | Return statements whose `published_at` is on or after this ISO-8601 datetime (inclusive)                       |
| `limit`              | int (optional)      | Number of statements per page. Defaults to 25; the maximum value is 500.                                       |
| `cursor`             | string (optional)   | Pagination cursor from a `next` or `previous` response URL                                                     |

#### Example Requests

```
GET /contractor_tax_statements?contractor=ctr_123
GET /contractor_tax_statements?company=com_123&publication_status=draft
GET /contractor_tax_statements?company=com_123&publication_status=published
GET /contractor_tax_statements?company=com_123&type=amendment
GET /contractor_tax_statements?company=com_123&year=2025
GET /contractor_tax_statements?company=com_123&publication_status=published&published_from=2027-01-12T14:22:07Z
```

<br />

#### Example Response

The response is paginated. Follow the `next` and `previous` URLs to move between pages.

```json
{
  "next": null,
  "previous": null,
  "results": [
    {
      "id": "cts_789",
      "contractor": "ctr_123",
      "company": "com_123",
      "year": 2026,
      "document": null,
      "published_at": null,
      "amends": null,
      "amended_by": null,
      "publication_status": "draft",
      "delivery_method": null,
      "mail_recipient": null
    },
    {
      "id": "cts_901",
      "contractor": "ctr_123",
      "company": "com_123",
      "year": 2025,
      "document": "doc_901",
      "published_at": "2026-03-02T14:00:00Z",
      "amends": "cts_456",
      "amended_by": null,
      "publication_status": "published",
      "delivery_method": "mail",
      "mail_recipient": "contractor"
    },
    {
      "id": "cts_456",
      "contractor": "ctr_123",
      "company": "com_123",
      "year": 2025,
      "document": "doc_456",
      "published_at": "2026-01-27T15:30:00Z",
      "amends": null,
      "amended_by": "cts_901",
      "publication_status": "published",
      "delivery_method": "mail",
      "mail_recipient": "contractor"
    },
    {
      "id": "cts_123",
      "contractor": "ctr_123",
      "company": "com_123",
      "year": 2024,
      "document": "doc_123",
      "published_at": "2025-01-28T16:05:00Z",
      "amends": null,
      "amended_by": null,
      "publication_status": "published",
      "delivery_method": "manual",
      "mail_recipient": null
    }
  ]
}
```

## Previewing and Downloading Statements

Contractor tax statements are metadata objects — to get the underlying 1099-NEC PDFs, you have two options:

* **Tax Packages**: generate previews of draft statements, or download published documents in bulk, by creating a tax package with the statement IDs in `contents.contractor_tax_statements`. See the [Tax Packages](https://docs.checkhq.com/docs/tax-packages-guide) guide.
* **Contractor Tax Documents**: for straightforward access to individual published 1099-NECs, use the [List contractor tax documents](https://docs.checkhq.com/reference/list-contractor-tax-documents) API.