Create & File a 1099 Form
1: Create a User
To create a new User call the POST /users
API endpoint. You can also follow the Getting Started guide to create a User.
When creating a User for 1099 Forms, all fields except for
phoneNumber
andaddress2
(when not needed) are required.
curl \
--request POST \
--url https://sandbox-api.withabound.com/<<apiVersion>>/users \
--header 'Authorization: Bearer <<apiKey>>' \
--header 'Content-Type: application/json' \
--data '{
"user": {
"email": "[email protected]",
"profile": {
"firstName": "Ada",
"lastName": "Lovelace",
"address": "256 Byron Street",
"address2": "Suite 32",
"city": "Palo Alto",
"state": "CA",
"zipcode": "94306",
"country": "US",
"phoneNumber": "6505551010",
"dateOfBirth": "1815-12-10",
"socialSecurityNumber": "101456789"
}
}
}'
const { default: Abound, Environment } = require("@withabound/node-sdk");
const abound = new Abound({
appId: "<<sandbox_app_id>>",
appSecret: "<<sandbox_app_secret>>",
environment: Environment.SANDBOX,
apiVersion: "<<apiVersion>>",
});
(async () => {
const response = await abound.users.create({
email: "[email protected]",
profile: {
firstName: "Ada",
lastName: "Lovelace",
address: "256 Byron Street",
address2: "Suite 32",
city: "Palo Alto",
state: "CA",
zipcode: "94306",
country: "US",
phoneNumber: "6505551010",
dateOfBirth: "1815-12-10",
socialSecurityNumber: "101456789",
},
});
console.log(response);
})();
import requests
url = "https://sandbox-api.withabound.com/<<apiVersion>>/users"
payload = {"user": {
"profile": {
"firstName": "Ada",
"lastName": "Lovelace",
"address": "256 Byron Street",
"address2": "Suite 32",
"city": "Palo Alto",
"state": "CA",
"zipcode": "94306",
"country": "US",
"phoneNumber": "6505551010",
"dateOfBirth": "1815-12-10",
"socialSecurityNumber": "101456789"
},
"email": "[email protected]"
}}
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.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>>
);
AboundResponse<User> response = abound.users().create(UserRequest.builder()
.email("[email protected]")
.profile(UserProfile.builder()
.firstName("Ada")
.lastName("Lovelace")
.address("256 Byron Street")
.address2("Suite 32")
.city("Palo Alto")
.state("CA")
.zipcode("94306")
.phoneNumber("6505551010")
.dateOfBirth("1815-12-10")
.socialSecurityNumber("101456789")
.build())
.build());
System.out.println(response.getData().getUserId());
package main
import (
"bytes"
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://sandbox-api.withabound.com/<<apiVersion>>/users"
var requestBody = []byte(`{
"user": {
"email": "[email protected]",
"profile": {
"firstName": "Ada",
"lastName": "Lovelace",
"address": "256 Byron Street",
"address2": "Suite 32",
"city": "Palo Alto",
"state": "CA",
"zipcode": "94306",
"country": "US",
"phoneNumber": "6505551010",
"dateOfBirth": "1815-12-10",
"socialSecurityNumber": "101456789"
}
}
}`)
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");
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 {
user = new {
email = "[email protected]",
profile = new {
firstName = "Ada",
lastName = "Lovelace",
address = "256 Byron Street",
address2 = "Suite 32",
city = "Palo Alto",
state = "CA",
zipcode = "94306",
country = "US",
phoneNumber = "6505551010",
dateOfBirth = "1815-12-10",
socialSecurityNumber = "101456789"
}
}
});
IRestResponse response = client.Execute(request);
require 'uri'
require 'net/http'
require 'openssl'
require 'json'
url = URI("https://sandbox-api.withabound.com/<<apiVersion>>/users")
requestBody = {
user: {
email: '[email protected]',
profile: {
firstName: 'Ada',
lastName: 'Lovelace',
address: '256 Byron Street',
address2: 'Suite 32',
city: 'Palo Alto',
state: 'CA',
zipcode: '94306',
country: 'US',
phoneNumber: '6505551010',
dateOfBirth: '1815-12-10',
socialSecurityNumber: '101456789'
}
}
}
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
2: Create a Payer
To create a new Payer, call the POST /payers
API endpoint.
curl \
--request POST \
--url https://sandbox-api.withabound.com/<<apiVersion>>/payers \
--header 'Authorization: Bearer <<apiKey>>' \
--header 'Content-Type: application/json' \
--data '{
"payers": [
{
"name": "Hooli",
"address": "1401 N Shoreline Blvd",
"address2": "Suite 1",
"city": "Mountain View",
"state": "CA",
"country": "US",
"zipcode": "94043",
"phoneNumber": "6501014096",
"taxIdNumber": "123451989"
}
]
}'
const fetch = require('node-fetch');
const url = 'https://sandbox-api.withabound.com/<<apiVersion>>/payers';
const options = {
method: 'POST',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
Authorization: 'Bearer <<apiKey>>'
},
body: JSON.stringify({
payers: [
{
name: "Acme Corp",
address: "1401 N Shoreline Blvd",
address2: "Suite 1",
city: "Mountain View",
state: "CA",
country: "US",
zipcode: "94043",
phoneNumber: "6501014096",
taxIdNumber: "123451989"
}
]
})
};
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>>/payers"
payload = {"payers": [
{
"name": "Acme Corp",
"address": "1401 N Shoreline Blvd",
"address2": "Suite 1",
"city": "Mountain View",
"state": "CA",
"country": "US",
"zipcode": "94043",
"phoneNumber": "6501014096",
"taxIdNumber": "123451989"
}
]}
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.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>>
);
PayerRequest toCreate =
PayerRequest.builder()
.name("Hooli")
.address("1401 N Shoreline Blvd")
.address2("Suite 1")
.city("Mountain View")
.state("CA")
.zipcode("94043")
.country("US")
.phoneNumber("6501014096")
.taxIdNumber("123451989")
.build();
AboundBulkResponse<Payer> response =
abound.payers().create(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>>/payers"
var requestBody = []byte(`{
"payers": [
{
"name": "Acme Corp",
"address": "1401 N Shoreline Blvd",
"address2": "Suite 1",
"city": "Mountain View",
"state": "CA",
"country": "US",
"zipcode": "94043",
"phoneNumber": "6501014096",
"taxIdNumber": "123451989"
}
]
}`)
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>>/payers");
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 {
payers = new[] {
new {
name = "Acme Corp",
address = "1401 N Shoreline Blvd",
address2 = "Suite 1",
city = "Mountain View",
state = "CA",
country = "US",
zipcode = "94043",
phoneNumber = "6501014096",
taxIdNumber = "123451989"
}
}
});
IRestResponse response = client.Execute(request);
require 'uri'
require 'net/http'
require 'openssl'
require 'json'
url = URI("https://sandbox-api.withabound.com/<<apiVersion>>/payers")
requestBody = {
payers: [
{
name: 'Acme Corp',
address: '1401 N Shoreline Blvd',
address2: 'Suite 1',
city: 'Mountain View',
state: 'CA',
country: 'US',
zipcode: '94043',
phoneNumber: '6501014096',
taxIdNumber: '123451989'
}
]
}
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
️ Payer State ID
Each 1099 requires the
filingState
to be included on the request. If your Payer is in one of the following states: Alabama, Delaware, Kansas, Mississippi, North Dakota, Oregon, or Pennsylvania, you have to include apayerStateId
when creating the 1099 Form. The example below usespayerStateId
. Please consult with appropriate tax counsel.For more information, review the Prerequisites for Issuing 1099 Forms.
3: Create the 1099 Form
Abound® currently supports the following 1099 forms. For an in-depth breakdown of each form and the required fields see below:
4: Monitor Document Status
In conjunction with our webhooks, you can receive updated statuses on your documents. The following provides a timeline that a 1099 Form will go through if it processed successfully and without errors:
- Create a 1099 Form,
status = "created"
(before the Abound® submission deadline) - Social Security Number is submitted to the IRS for validation,
status="verifying"
. This step only occurs the first time you create a 1099 for auser
. - 1099 Form is submitted to the IRS and State,
status = "pending"
- 1099 Form is successfully received by the IRS and State,
status = "done"
When a document webhook is updated, the payload will resemble:
documentURLs
/resourceURLs
expire after 7 days, you can receive a new url usingGET
Documents
{
"resource": "documents",
"resourceId": "documentId_7a42426c297d089499577aeb37a5bbe93e3216f3",
"resourceURL": "https://sandbox-api.withabound.com/<<apiVersion>>/users/userId_0aa8b15c0cce59aa766156e6328798c80512131a/documents/documentId_7a42426c297d089499577aeb37a5bbe93e3216f3",
"resourceStatus": "done",
"event": "documents.updated",
"userId": "userId_0aa8b15c0cce59aa766156e6328798c80512131a",
"webhookId": "webhookId_f651462d773efbce6253f553f54767ff26811791",
"webhookURL": "https://webhook.site/e665ac70-4914-4d8b-ab48-fa2b47680b4a",
"webhookRequestId": "webhookRequestId_1639156677392"
}
For both a successful and failed 1099 form filing, it’s important that you be notified upon an update to the status of your document. Abound® uses webhooks to communicate with your servers when a relevant event occurs.
Updated 11 days ago