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 per payerId per year
  • 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

FieldForm 1099-NECDescription
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.
isCorrectedCorrected Box(Optional) If true, the corrected checkbox will be marked on the document. Defaults to false.
accountNumberAccount numberIf the Payer assigns the contractor a unique number for its records, enter the account number in this box. If not, leave the box blank.
nonemployeeCompensationBox 1 -- Nonemployee compensation($) Total amount remitted by Payer to Recipient during a year
hasDirectSalesOver5000Box 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.
federalIncomeTaxWithheldBox 4. Federal income tax withheldAbound currently does not support non-zero values in this field. Please contact us for more information.
stateTaxWithheldBox 5. State tax withheldAbound currently does not support non-zero values in this field. Please contact us for more information.
filingStateNot displayed on form.Abbreviation for the state to which the 1099 will be reported.
payerStateIdBox 6. State/ Payer's tax no.Up to two (2) states per Form 1099-NEC.
stateIncomeBox 7. State income($) Up to two (2) states per Form 1099-NEC.