List
List
This endpoint retrieves a list of Form W-2 returns that have been created, submitted, or transmitted in TaxBandits, filtered by submission or business identifiers. For example, passing a BusinessId returns all returns created under that business.
You can also filter results by status type (Federal Filing, State Filing, Online Access, or Postal Mailing) and retrieve returns with a specific status (e.g., Accepted, Rejected, Pending).
POST formw2/list Request Body
| Field | Type | Description |
|---|---|---|
| TaxYear | String | Tax year for which the W-2 returns should be listed. |
| FormTypes | Object[] | List of form types to filter the returns. Allowed values Allowed values"FORMW2" |
| Business | object | Business details used to identify the payer. |
| BusinessId | GUID | Unique Business ID generated by TaxBandits. If provided, you do not need to send the business details again. |
| PayerRef | String | Optional Your unique reference for the payer. Can be used instead of BusinessId. Size Range: 50 |
| BusinessNm | String | Legal name of the business. Size Range: 75 |
| TINType | String | TIN type of the business. Allowed values Allowed values"EIN" |
| PayerTIN | String | Last four digits of the business TIN. |
| Employee | object | Employee details used to identify the Employee. |
| EmployeeId | GUID | Unique Employee ID generated by TaxBandits. |
| EmployeeRef | String | Optional Your unique reference for the Employee. Size Range: 50 |
| EmployeeNm | String | Name of the Employee. Size Range: 75 |
| EmployeeTINType | String | TIN type of the Employee. Allowed values Allowed values"SSN" |
| EmployeeLast4TIN | String | Last four digits of the Employee's TIN. |
| SubmissionId | GUID | Unique ID assigned by TaxBandits to the submission. |
| Federal | object | Filters returns based on the federal filing status. |
| Status | Object[] | One or more federal return statuses to filter the results.Allowed values"CREATED", "TRANSMITTED", "SENT_TO_AGENCY", "ACCEPTED", "REJECTED", "ACCEPTED_WITH_ERRORS" |
| State | object | Filters returns based on the state filing status. |
| Status | Object[] | One or more state return statuses to filter the results.Allowed values"CREATED", "TRANSMITTED", "SENT_TO_AGENCY", "ACCEPTED", "REJECTED" |
| Distribution | object | Filters returns based on online access or postal distribution status. |
| OAStatus | Object[] | One or more online access statuses to filter the results.Allowed values"CREATED", "ORDER_RECEIVED", "EMAIL_SENT", "DOWNLOADED_FORM", "VIEWED_FORM" |
| PostalStatus | Object[] | One or more postal distribution statuses to filter the results.Allowed values"CREATED","ORDER_RECEIVED","POSTAL_INITIATED","HANDED_OVER_TO_USPS","MAILED","IN_TRANSIT","OUT_FOR_DELIVERY","ASSUMED_DELIVERED","RE_ROUTED","INTERNATIONAL_EXIT" |
| FromDate | String | Start date for listing returns (MM/DD/YYYY). |
| ToDate | String | End date for listing returns (MM/DD/YYYY). |
| Page | Number | Page number of the results to retrieve. |
| PageSize | Number | Number of records to return per page (maximum 100). |
| Errors | object[] | List of validation errors for state returns. |
| Id | String | Unique ID of the validation error. |
| Name | String | Name of the validation error. |
| Message | String | Description of the validation error. |
Response Body
| Field | Type | Description |
|---|---|---|
| FormW2EmployeeRecords | Object[] | List of W-2 return records. |
| TaxYear | String | Tax year of the listed returns. |
| FormType | String | Form type of the listed W-2 returns. |
| SubmissionId | GUID | Unique ID of the submission. |
| RecordId | GUID | Unique ID of the return record. |
| BusinessId | GUID | Unique ID of the business. |
| BusinessNm | String | Name of the business. |
| PayerRef | String | Your unique reference for the business. |
| EmployeeId | GUID | Unique ID of the Employee. |
| EmployeeRef | String | Your unique reference for the Employee. |
| IndividualNm | String | Returns name of the Employee. |
| FirstNm | String | First name of the Employee. |
| MiddleNm | String | Middle name of the Employee. |
| LastNm | String | Last name of the Employee. |
| Suffix | String | Suffix of the Employee's name |
| FederalStatus | object | Federal filing status details for the return. |
| Status | String | Current status of the return. |
| Info | String | Additional information about the federal filing service. |
| StatusTs | String | Date and time when the federal status was updated. |
| StatesStatus | object | State filing status details for the return. |
| Status | String | Current state filing status. |
| Info | String | Additional information about the state filing service. |
| StatusTs | String | Date and time the state status was updated. |
| Distribution | object | Distribution status details for postal or online access. |
| DistributionType | String | Distribution method selected for the return. |
| PostalStatus | object | Postal mailing status details. |
| PostalType | String | Postal mailing method selected for the return. |
| Status | String | Current postal mailing status. |
| Info | String | Additional information about the postal mailing service. |
| StatusTs | String | Date and time when the return was processed for postal mailing. |
| OnlineAccessStatus | Object | Online access status details. |
| String | Email address used for online access. | |
| Status | String | Current online access status. |
| Info | String | Additional information about the online access service. |
| StatusTs | String | Date and time when the return was processed for online access. |
| AttachmentURL | String | URL to download the PDF of any additional attachments. |
| CreatedTs | String | Date and time when the return was created. |
| LastUpdatedTs | String | Date and time when the return was last updated. |
| Page | Number | Page number containing the listed records. |
| PageSize | Number | Number of records returned per page. |
| Errors | object[] | Error details if validation errors. |
| Id | String | Unique ID of the validation error. |
| Name | String | Name of the validation error. |
| Message | String | Description of the validation error. |
Payload

Go Lang
Node.js
Python
.NET C#

Ruby
Java

cURL
| Sample | Description | Action |
|---|---|---|
| Sample 1 | List Form W2 returns using payer, submission, filing status, state status, and distribution filters. | |
| Sample 2 | Use this description: List Form W2 returns using submissionId. |
Sample 1
{
"TaxYear": "2026",
"FormTypes": [
"FORMW2"
],
"Business": {
"BusinessId": "248a5b04-523a-4ea0-8545-6667aab59cd8",
"PayerRef": null,
"BusinessNm": null,
"TINType": null,
"PayerTIN": null
},
"Employee": {
"EmployeeId": "3b7f1dbf-9b48-470a-bf3a-9c97d7edaf9d",
"EmployeeRef": null,
"EmployeeNm": null,
"EmployeeTINType": null,
"EmployeeLast4TIN": null
},
"SubmissionId": "a815e0a4-792d-491c-aef0-887969abc456",
"Federal": {
"Status": [
"CREATED",
"TRANSMITTED"
]
},
"State": {
"StateCd": [
"SC",
"MD"
],
"Status": [
"CREATED",
"TRANSMITTED "
]
},
"Distribution": {
"OAStatus": [
"CREATED"
],
"PostalStatus": [
"CREATED"
]
},
"FromDate": null,
"ToDate": null,
"Page": 1,
"PageSize": 100
}
| Response | Description | Action |
|---|---|---|
| 200 | Success Response - This is a sample response for successful API requests. | |
| 400 | Bad Request Response - You'll get the below response when your API requests contain any validation errors. | |
| 401 | Unauthorized Response - You'll get the below response when your API requests when Authorization Failed. |
Response: 200
{
"FormW2EmployeeRecords": [
{
"TaxYear": "2026",
"FormType": "FORMW2",
"SubmissionId": "43f4f9e8-9ad6-4fff-88cd-0f6e158b82f4",
"RecordId": "5bcc66a5-fb93-49bb-80c1-5a39b4924d07",
"BusinessId": "cd19fb80-c7b3-44e6-a086-271f875be16a",
"BusinessNm": "Wintag LLC",
"PayerRef": "",
"EmployeeId": "bfae6528-1795-46c4-bb9d-1b54c4142882",
"EmployeeRef": "",
"IndividualNm": {
"FirstNm": "David",
"MiddleNm": "R",
"LastNm": "Thompson",
"Suffix": ""
},
"FederalStatus": {
"StatusCd": "FED_001",
"Status": "CREATED",
"StatusTs": "2026-08-18 03:40:03 -04:00",
"Info": "The return is created and is not transmitted yet",
"Errors": null
},
"StatesStatus": [
{
"StateCd": "SC",
"StatusCd": "STATE_001",
"Status": "CREATED",
"StatusTs": "2026-08-18 03:40:03 -04:00",
"Info": "The return is created and is not been transmitted yet",
"Errors": null
}
],
"Distribution": {
"DistributionType": "POSTAL_AND_ONLINE",
"PostalStatus": {
"PostalType": "USPS_FIRST_CLASS",
"Code": "POSTAL_001",
"Status": "CREATED",
"StatusTs": "2026-08-18 03:40:03 -04:00",
"Info": ""
},
"OnlineAccessStatus": {
"Email": "michael.carter@sample.com",
"Code": "ONLINE_001",
"Status": "CREATED",
"StatusTs": "2026-08-18 03:40:03 -04:00",
"Info": null
},
"AttachmentURL": null
},
"CreatedTs": "2026-08-18 03:40:03 -04:00",
"LastUpdatedTs": "2026-08-18 03:40:03 -04:00"
}
],
"Page": 1,
"PageSize": 2,
"TotalRecords": 1,
"TotalPages": 1,
"Errors": null
}
package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
url := "<APIURL>/v2.0.0/formw2/list"
method := "POST"
payload := strings.NewReader(`{
"TaxYear": "2026",
"FormTypes": [
"FORMW2"
],
"Business": {
"BusinessId": null,
"PayerRef": "Payer132",
"BusinessNm": "Steven LLC",
"TINType": "EIN",
"PayerTIN": null
},
"Employee": {
"EmployeeId": null,
"EmployeeRef": "Payee123",
"EmployeeNm": null,
"EmployeeTINType": "SSN",
"EmployeeLast4TIN": null
},
"SubmissionId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"Federal": {
"Status": [
"CREATED",
"TRANSMITTED",
"SCHEDULED"
]
},
"State": {
"StateCd": [
"SC",
"MD"
],
"Status": [
"CREATED",
"SCHEDULED "
]
},
"Distribution": {
"OAStatus": [
"OPENED",
"VIEWED"
],
"PostalStatus": [
"SENT"
]
},
"FromDate": null,
"ToDate": null,
"Page": 1,
"PageSize": 100
}`)
client := &http.Client{}
req, err := http.NewRequest(method, url, payload)
if err != nil {
fmt.Println(err)
return
}
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Authorization", "<ACCESS_TOKEN>")
res, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer res.Body.Close()
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(body))
}
const axios = require('axios');
let data = JSON.stringify({
"TaxYear": "2026",
"FormTypes": [
"FORMW2"
],
"Business": {
"BusinessId": null,
"PayerRef": "Payer132",
"BusinessNm": "Steven LLC",
"TINType": "EIN",
"PayerTIN": null
},
"Employee": {
"EmployeeId": null,
"EmployeeRef": "Payee123",
"EmployeeNm": null,
"EmployeeTINType": "SSN",
"EmployeeLast4TIN": null
},
"SubmissionId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"Federal": {
"Status": [
"CREATED",
"TRANSMITTED",
"SCHEDULED"
]
},
"State": {
"StateCd": [
"SC",
"MD"
],
"Status": [
"CREATED",
"SCHEDULED "
]
},
"Distribution": {
"OAStatus": [
"OPENED",
"VIEWED"
],
"PostalStatus": [
"SENT"
]
},
"FromDate": null,
"ToDate": null,
"Page": 1,
"PageSize": 100
});
let config = {
method: 'post',
maxBodyLength: Infinity,
url: '<APIURL>/v2.0.0/formw2/list',
headers: {
'Content-Type': 'application/json',
'Authorization': '<ACCESS_TOKEN>'
},
data : data
};
axios.request(config)
.then((response) => {
console.log(JSON.stringify(response.data));
})
.catch((error) => {
console.log(error);
});
import http.client
import json
conn = http.client.HTTPSConnection("<APIURL>")
payload = json.dumps({
"TaxYear": "2026",
"FormTypes": [
"FORMW2"
],
"Business": {
"BusinessId": None,
"PayerRef": "Payer132",
"BusinessNm": "Steven LLC",
"TINType": "EIN",
"PayerTIN": None
},
"Employee": {
"EmployeeId": None,
"EmployeeRef": "Payee123",
"EmployeeNm": None,
"EmployeeTINType": "SSN",
"EmployeeLast4TIN": None
},
"SubmissionId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"Federal": {
"Status": [
"CREATED",
"TRANSMITTED",
"SCHEDULED"
]
},
"State": {
"StateCd": [
"SC",
"MD"
],
"Status": [
"CREATED",
"SCHEDULED "
]
},
"Distribution": {
"OAStatus": [
"OPENED",
"VIEWED"
],
"PostalStatus": [
"SENT"
]
},
"FromDate": None,
"ToDate": None,
"Page": 1,
"PageSize": 100
})
headers = {
'Content-Type': 'application/json',
'Authorization': '<ACCESS_TOKEN>'
}
conn.request("POST", "/v2.0.0/formw2/list", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, "<APIURL>/v2.0.0/formw2/list");
request.Headers.Add("Authorization", "<ACCESS_TOKEN>");
var content = new StringContent("{
"TaxYear": "2026",
"FormTypes": [
"FORMW2"
],
"Business": {
"BusinessId": null,
"PayerRef": "Payer132",
"BusinessNm": "Steven LLC",
"TINType": "EIN",
"PayerTIN": null
},
"Employee": {
"EmployeeId": null,
"EmployeeRef": "Payee123",
"EmployeeNm": null,
"EmployeeTINType": "SSN",
"EmployeeLast4TIN": null
},
"SubmissionId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"Federal": {
"Status": [
"CREATED",
"TRANSMITTED",
"SCHEDULED"
]
},
"State": {
"StateCd": [
"SC",
"MD"
],
"Status": [
"CREATED",
"SCHEDULED "
]
},
"Distribution": {
"OAStatus": [
"OPENED",
"VIEWED"
],
"PostalStatus": [
"SENT"
]
},
"FromDate": null,
"ToDate": null,
"Page": 1,
"PageSize": 100
}", null, "application/json");
request.Content = content;
var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
Console.WriteLine(await response.Content.ReadAsStringAsync());
require "uri"
require "json"
require "net/http"
url = URI("<APIURL>/v2.0.0/formw2/list")
http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "<ACCESS_TOKEN>"
request.body = JSON.dump({
"TaxYear": "2026",
"FormTypes": [
"FORMW2"
],
"Business": {
"BusinessId": "nil",
"PayerRef": "Payer132",
"BusinessNm": "Steven LLC",
"TINType": "EIN",
"PayerTIN": "nil"
},
"Employee": {
"EmployeeId": "nil",
"EmployeeRef": "Payee123",
"EmployeeNm": "nil",
"EmployeeTINType": "SSN",
"EmployeeLast4TIN": "nil"
},
"SubmissionId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"Federal": {
"Status": [
"CREATED",
"TRANSMITTED",
"SCHEDULED"
]
},
"State": {
"StateCd": [
"SC",
"MD"
],
"Status": [
"CREATED",
"SCHEDULED "
]
},
"Distribution": {
"OAStatus": [
"OPENED",
"VIEWED"
],
"PostalStatus": [
"SENT"
]
},
"FromDate": "nil",
"ToDate": "nil",
"Page": 1,
"PageSize": 100
})
response = http.request(request)
puts response.read_body
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{
"TaxYear": "2026",
"FormTypes": [
"FORMW2"
],
"Business": {
"BusinessId": null,
"PayerRef": "Payer132",
"BusinessNm": "Steven LLC",
"TINType": "EIN",
"PayerTIN": null
},
"Employee": {
"EmployeeId": null,
"EmployeeRef": "Payee123",
"EmployeeNm": null,
"EmployeeTINType": "SSN",
"EmployeeLast4TIN": null
},
"SubmissionId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"Federal": {
"Status": [
"CREATED",
"TRANSMITTED",
"SCHEDULED"
]
},
"State": {
"StateCd": [
"SC",
"MD"
],
"Status": [
"CREATED",
"SCHEDULED "
]
},
"Distribution": {
"OAStatus": [
"OPENED",
"VIEWED"
],
"PostalStatus": [
"SENT"
]
},
"FromDate": null,
"ToDate": null,
"Page": 1,
"PageSize": 100
}");
Request request = new Request.Builder()
.url("<APIURL>/v2.0.0/formw2/list")
.method("POST", body)
.addHeader("Content-Type", "application/json")
.addHeader("Authorization", "<ACCESS_TOKEN>")
.build();
Response response = client.newCall(request).execute();
curl --location '<APIURL>/v2.0.0/formw2/list' --header 'Content-Type: application/json' --header 'Authorization: <ACCESS_TOKEN>' --data '{
"TaxYear": "2026",
"FormTypes": [
"FORMW2"
],
"Business": {
"BusinessId": null,
"PayerRef": "Payer132",
"BusinessNm": "Steven LLC",
"TINType": "EIN",
"PayerTIN": null
},
"Employee": {
"EmployeeId": null,
"EmployeeRef": "Payee123",
"EmployeeNm": null,
"EmployeeTINType": "SSN",
"EmployeeLast4TIN": null
},
"SubmissionId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"Federal": {
"Status": [
"CREATED",
"TRANSMITTED",
"SCHEDULED"
]
},
"State": {
"StateCd": [
"SC",
"MD"
],
"Status": [
"CREATED",
"SCHEDULED "
]
},
"Distribution": {
"OAStatus": [
"OPENED",
"VIEWED"
],
"PostalStatus": [
"SENT"
]
},
"FromDate": null,
"ToDate": null,
"Page": 1,
"PageSize": 100
}'