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.
Drafts onlyThe Contractor Tax Statements API is generally available, but Check does not publish contractor tax statements in production yet. Every production statement is a
draft, sodocument,published_at, anddelivery_methodare null. You can preview a statement's 1099-NEC through a tax package.
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 API, and differs in these ways:
- 1099-NEC only: every contractor tax statement is a 1099-NEC, so the object has no
formfield and the list has noformfilter. - No amendments: contractor statements have no
amendsoramended_byfields. The list acceptstype=amendmentandpublication_status=pending_correction, but both return no results. - No filings or refresh time: the object has no
filingsorrefreshed_atfields. - Delivery is set at publish:
delivery_methodis null while a statement is a draft. Check sets it when the statement is published, and clears it again if the statement is unpublished. - Paginated list: the list endpoint returns a paginated response, and requires a
contractororcompanyfilter. - Contractor scopes: the API requires an API key with the
contractor:read,contractor:write, orcontractor:adminscope, and returns404unless 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 or has been published
- When it was published
- How Check decided to deliver 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.
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 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. |
publication_status | enum | Publication status: draft or 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.
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 or published. pending_correction is accepted but returns no results. |
type | enum (optional) | original returns every statement. amendment is accepted but returns no results. |
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&year=2025
GET /contractor_tax_statements?company=com_123&publication_status=published&published_from=2027-01-12T14:22:07Z
Example Response
The response is paginated. Follow the next and previous URLs to move between pages.
{
"next": null,
"previous": null,
"results": [
{
"id": "cts_789",
"contractor": "ctr_123",
"company": "com_123",
"year": 2026,
"document": null,
"published_at": null,
"publication_status": "draft",
"delivery_method": null,
"mail_recipient": null
},
{
"id": "cts_456",
"contractor": "ctr_123",
"company": "com_123",
"year": 2025,
"document": "doc_456",
"published_at": "2026-01-27T15:30:00Z",
"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",
"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 guide. - Contractor Tax Documents: for straightforward access to individual published 1099-NECs, use the List contractor tax documents API.
Updated 1 day ago

