1099-NEC
Overview
If a Payer does not consider an individual (User) to be an employee and did not withhold income tax or social security and Medicare tax, it must issue a Form 1099-NEC. A Payer must file a Form 1099-NEC for each user to whom it paid at least $600 during the tax year in:
- Services performed by someone who is not an employee (including parts and materials)
- Cash payments for fish (or other aquatic life) you purchase from anyone engaged in the trade or business of catching fish
- Payments to an attorney
You must also file Form 1099-NEC for each User from whom you have withheld any federal income tax under the backup withholding rules regardless of the amount of the payment.
Issuing a 1099-NEC Form
To issue a 1099-NEC form and initiate the filing process use an existing userId
and payerId
and call the POST /users/{userId}/documents
API endpoint.
Form 1099-NEC Guidelines
- Only one (1) Form 1099-NEC is allowed per
userId
perpayerId
peryear
- To make changes to an existing Form 1099-NEC, delete it, and recreate it with your changes
- Once the filing process has started, your Form 1099-NEC cannot be deleted
curl \
--request POST \
--url https://sandbox-api.withabound.com/<<apiVersion>>/users/<<testUserId>>/documents \
--header 'Authorization: Bearer <<apiKey>>' \
--header 'Content-Type: application/json' \
--data '{
"documents": [
{
"type": "1099nec",
"year": 2022,
"payerId": "<<testPayerId>>",
"accountNumber": "1234567890",
"nonemployeeCompensation": 234.23,
"hasDirectSalesOver5000": false,
"federalIncomeTaxWithheld": 0,
"stateTaxInfo": [
{
"stateTaxWithheld": 0,
"filingState": "CA",
"payerStateId": "1234567891",
"stateIncome": 3455.43
}
]
}
]
}'
const fetch = require('node-fetch');
const url = 'https://sandbox-api.withabound.com/<<apiVersion>>/users/<<testUserId>>/documents';
const options = {
method: 'POST',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
Authorization: 'Bearer <<apiKey>>'
},
body: JSON.stringify({
documents: [
{
type: '1099nec',
year: 2022,
payerId: '<<testPayerId>>',
accountNumber: '1234567890',
nonemployeeCompensation: 234.23,
hasDirectSalesOver5000: false,
federalIncomeTaxWithheld: 233.23,
stateTaxInfo: [
{
stateTaxWithheld: 323.23,
filingState: 'CA',
payerStateId: '1234567891',
stateIncome: 3455.43
},
{
stateTaxWithheld: 323.23,
filingState: 'AZ',
payerStateId: '1234567892',
stateIncome: 3455.43
}
]
}
]
})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error('error:' + err));
import requests
url = "https://sandbox-api.withabound.com/<<apiVersion>>/users/<<testUserId>>/documents"
payload = {"documents": [
{
"type": "1099nec",
"year": "2022",
"payerId": "<<testPayerId>>",
"accountNumber": "1234567890",
"nonemployeeCompensation": 234.23,
"hasDirectSalesOver5000": False,
"federalIncomeTaxWithheld": 233.23,
"stateTaxInfo": [
{
"stateTaxWithheld": 323.23,
"filingState": "CA",
"payerStateId": "1234567891",
"stateIncome": 3455.43
},
{
"stateTaxWithheld": 323.23,
"filingState": "AZ",
"payerStateId": "1234567892",
"stateIncome": 3455.43
}
]
}
]}
headers = {
"Accept": "application/json",
"Content-Type": "application/json",
"Authorization": "Bearer <<apiKey>>"
}
response = requests.request("POST", url, json=payload, headers=headers)
print(response.text)
// import com.squareup.okhttp.*;
// import com.google.gson.JsonObject;
// import com.google.gson.JsonArray;
// import com.withabound.AboundConfig;
// import com.withabound.models.*;
// import com.withabound.resources.base*;
AboundConfig aboundConfig = new AboundConfig(
"<<sandbox_app_id>>",
"<<sandbox_app_secret>>",
AboundEnvironment.SANDBOX,
AboundApiVersion.<<apiVersionUppercase>>
);
Abound abound = new Abound(aboundConfig);
String userId = "<<testUserId>>";
String payerId = "<<testPayerId>>";
String accountNumber = "1234567890";
Double nonemployeeCompensation = 234.23;
StateTaxInfoWithIncome stateTaxInfo_CA = StateTaxInfoWithIncome.builder()
.filingState("ca")
.payerStateId("1234567891")
.stateTaxWithheld(323.23)
.stateIncome(3455.43)
.build();
StateTaxInfoWithIncome stateTaxInfo_AZ = StateTaxInfoWithIncome.builder()
.filingState("az")
.payerStateId("1234567892")
.stateTaxWithheld(323.23)
.stateIncome(3455.43)
.build();
Form1099NECDocumentRequest toCreate = Form1099NECDocumentRequest.builder()
.payerId(payerId)
.accountNumber(accountNumber)
.nonemployeeCompensation(nonemployeeCompensation)
.year(2022)
.stateTaxInfo(Arrays.asList(stateTaxInfo_CA, stateTaxInfo_AZ))
.build();
AboundBulkResponse<Document> response = abound.documents()
.create(userId, Collections.singletonList(toCreate));
System.out.println(response.getData());
package main
import (
"bytes"
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://sandbox-api.withabound.com/<<apiVersion>>/users/<<testUserId>>/documents"
var requestBody = []byte(`{
"documents": [
{
"type": "1099nec",
"year": 2022,
"payerId": "<<testPayerId>>",
"accountNumber": "1234567890",
"nonemployeeCompensation": 234.23,
"hasDirectSalesOver5000": false,
"federalIncomeTaxWithheld": 233.23,
"stateTaxInfo": [
{
"stateTaxWithheld": 323.23,
"filingState": "CA",
"payerStateId": "1234567891",
"stateIncome": 3455.43
},
{
"stateTaxWithheld": 323.23,
"filingState": "AZ",
"payerStateId": "1234567892",
"stateIncome": 3455.43
}
]
}
]
}`)
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(requestBody))
req.Header.Add("Accept", "application/json")
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Authorization", "Bearer <<apiKey>>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
// using RestSharp;
var client = new RestClient("https://sandbox-api.withabound.com/<<apiVersion>>/users/<<testUserId>>/documents");
var request = new RestRequest(Method.POST);
request.AddHeader("Accept", "application/json");
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Authorization", "Bearer <<apiKey>>");
request.AddJsonBody(new {
documents = new[] {
new {
type = "1099nec",
year = 2022,
payerId = "<<testPayerId>>",
accountNumber = "1234567890",
nonemployeeCompensation = 234.23,
hasDirectSalesOver5000 = false,
federalIncomeTaxWithheld = 233.23,
stateTaxInfo = new[] {
new {
stateTaxWithheld = 323.23,
filingState = "CA",
payerStateId = "1234567891",
stateIncome = 3455.43
},
new {
stateTaxWithheld = 323.23,
filingState = "AZ",
payerStateId = "1234567892",
stateIncome = 3455.43
}
}
}
}
});
IRestResponse response = client.Execute(request);
require 'uri'
require 'net/http'
require 'openssl'
require 'json'
url = URI("https://sandbox-api.withabound.com/<<apiVersion>>/users/<<testUserId>>/documents")
requestBody = {
documents: [
{
type: '1099nec',
year: 2022,
payerId: '<<testPayerId>>',
accountNumber: '1234567890',
nonemployeeCompensation: 234.23,
hasDirectSalesOver5000: false,
federalIncomeTaxWithheld: 233.23,
stateTaxInfo: [
{
stateTaxWithheld: 323.23,
filingState: 'CA',
payerStateId: '1234567891',
stateIncome: 3455.43
},
{
stateTaxWithheld: 323.23,
filingState: 'AZ',
payerStateId: '1234567892',
stateIncome: 3455.43
}
]
}
]
}
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Accept"] = 'application/json'
request["Content-Type"] = 'application/json'
request["Authorization"] = 'Bearer <<apiKey>>'
request.body = requestBody.to_json
response = http.request(request)
puts response.read_body
Response
{
"data": [
{
"documentId": "documentId_testefbd5d3d9ee9526ef9ff89a7c6b879174170",
"documentURL": "https://tax-documents-sandbox.s3.us-west-2.amazonaws.com/test62ae93bafa6310aa9952e8b3bf5796443111/2022_Form_1099-NEC.pdf?AWSAccessKeyId=AKIA6C6AUYYBZMXK74XQ&Expires=1630423763&Signature=TZnExYSnxm2dzM%2Bof7EfCOiSG34%3D",
"documentName": "2022 Form 1099-NEC",
"type": "1099nec",
"year": "2022",
"status": "created",
"createdTimestamp": 1628275165630
}
]
}
Form 1099-NEC Fields
Below is the Form 1099-NEC with fields overlaid. Note that some fields have been shortened to fit.
Form 1099-NEC Definitions
Field | Form 1099-NEC | Description |
---|---|---|
documentId | -- | The unique id generated by Abound® API to designate this document. Store this value in your database. |
status | -- | The status generated by Abound® API. Possible statuses include: created , verifying , pending , error , and done . |
type | -- | This specifies the Form 1099 type, in this case, enter 1099nec . |
payerId | -- | Unique ID associated with the Payer. Store this value in your database. |
year | -- | This is the tax year associated with the Form 1099-NEC. |
isCorrected | Corrected Box | (Optional) If true , the corrected checkbox will be marked on the document. Defaults to false . |
accountNumber | Account number | If the Payer assigns the contractor a unique number for its records, enter the account number in this box. If not, leave the box blank. |
nonemployeeCompensation | Box 1 -- Nonemployee compensation | ($) Total amount remitted by Payer to Recipient during a year |
hasDirectSalesOver5000 | Box 2: Direct sales (checkbox) | If checked, consumer products totaling $5,000 or more were sold to Recipient for resale, on a buy-sell, a deposit-commission, or other basis. |
federalIncomeTaxWithheld | Box 4. Federal income tax withheld | Abound currently does not support non-zero values in this field. Please contact us for more information. |
stateTaxWithheld | Box 5. State tax withheld | Abound currently does not support non-zero values in this field. Please contact us for more information. |
filingState | Not displayed on form. | Abbreviation for the state to which the 1099 will be reported. |
payerStateId | Box 6. State/ Payer's tax no. | Up to two (2) states per Form 1099-NEC. |
stateIncome | Box 7. State income | ($) Up to two (2) states per Form 1099-NEC. |
Updated 11 days ago