Overview

Payments made with a credit card or payment card and certain other types of payments, including third-party network transactions, must be reported on Form 1099-K.

1099-K Issuance

To issue a 1099-K form and initiate the filing process use an existing userId and payerId and call the POST /users/{userId}/documents API endpoint.

📘

Form 1099-K Guidelines

  • Only one (1) Form 1099-K is allowed per userId per payerId per year
  • To make changes to an existing Form 1099-K, delete it, and recreate it with your changes
  • Once the filing process has started, your Form 1099-K 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": "1099k",
        "year": 2022,
        "payerId": "<<testPayerId>>",
        "payerClassification": "PSE",
        "transactionsReportedClassification": "paymentCard",
        "pseName": "Payment Entity",
        "psePhoneNumber": "5555555555",
        "accountNumber": "1234567890",
        "aggregateGrossAmount": 279878.76,
        "aggregateGrossAmountCardNotPresent": 23323.23,
        "merchantCategoryCode": "4582",
        "numberOfPaymentTransactions": 767,
        "federalIncomeTaxWithheld": 0,
        "grossAmountsByMonth": {
          "january": 23323.23,
          "february": 23323.23,
          "march": 23323.23,
          "april": 23323.23,
          "may": 23323.23,
          "june": 23323.23,
          "july": 23323.23,
          "august": 23323.23,
          "september": 23323.23,
          "october": 23323.23,
          "november": 23323.23,
          "december": 23323.23
        },
        "stateTaxInfo": [
          {
            "filingState": "CA",
            "userStateId": "1234567891",
            "stateTaxWithheld": 0
          }
        ]
      }
    ]
  }'
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: '1099k',
        year: 2022,
        payerId: '<<testPayerId>>',
        payerClassification: 'PSE',
        transactionsReportedClassification: 'paymentCard',
        pseName: 'Payment Entity',
        psePhoneNumber: '55555555555',
        accountNumber: '1234567890',
        aggregateGrossAmount: 23323.23,
        aggregateGrossAmountCardNotPresent: 23323.23,
        merchantCategoryCode: '4582',
        numberOfPaymentTransactions: 767,
        federalIncomeTaxWithheld: 23323.23,
        grossAmountsByMonth: {
          january: 23323.23,
          february: 23323.23,
          march: 23323.23,
          april: 23323.23,
          may: 23323.23,
          june: 23323.23,
          july: 23323.23,
          august: 23323.23,
          september: 23323.23,
          october: 23323.23,
          november: 23323.23,
          december: 23323.23
        },
        stateTaxInfo: [
          {
            filingState: 'CA',
            payerStateId: '1234567891',
            stateTaxWithheld: 194.23
          },
          {
            filingState: 'AZ',
            payerStateId: '1234567892',
            stateTaxWithheld: 194.23
          }
        ]
      }
    ]
  })
};

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": "1099k",
            "year": "2022",
            "payerId": "<<testPayerId>>",
            "payerClassification": "PSE",
            "transactionsReportedClassification": "paymentCard",
            "pseName": "Payment Entity",
            "psePhoneNumber": "55555555555",
            "accountNumber": "1234567890",
            "aggregateGrossAmount": 23323.23,
            "aggregateGrossAmountCardNotPresent": 23323.23,
            "merchantCategoryCode": "4582",
            "numberOfPaymentTransactions": 767,
            "federalIncomeTaxWithheld": 23323.23,
            "grossAmountsByMonth": {
                "january": 23323.23,
                "february": 23323.23,
                "march": 23323.23,
                "april": 23323.23,
                "may": 23323.23,
                "june": 23323.23,
                "july": 23323.23,
                "august": 23323.23,
                "september": 23323.23,
                "october": 23323.23,
                "november": 23323.23,
                "december": 23323.23
            },
            "stateTaxInfo": [
                {
                    "filingState": "CA",
                    "payerStateId": "1234567891",
                    "stateTaxWithheld": 194.23
                },
                {
                    "filingState": "AZ",
                    "payerStateId": "1234567892",
                    "stateTaxWithheld": 194.23
                }
            ]
        }
    ]}
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>>";

GrossAmountsByMonth grossAmountsByMonth = GrossAmountsByMonth.builder()
  .january(23323.23)
  .february(23323.23)
  .march(23323.23)
  .april(23323.23)
  .may(23323.23)
  .june(23323.23)
  .july(23323.23)
  .august(23323.23)
  .september(23323.23)
  .october(23323.23)
  .november(23323.23)
  .december(23323.23)
  .build();

Form1099KDocumentRequest form1099KDocumentRequest = Form1099KDocumentRequest.builder()
  .payerId(payerId)
  .payerClassification(PayerClassification.PAYMENT_SETTLEMENT_ENTITY)
  .pseName("Payment Entity")
  .psePhoneNumber("5555555555")
  .transactionsReportedClassification(TransactionsReportedClassification.PAYMENT_CARD)
  .accountNumber("1234567890")
  .merchantCategoryCode("4582")
  .aggregateGrossAmount(23323.23)
  .aggregateGrossAmountCardNotPresent(23323.23)
  .numberOfPaymentTransactions(767)
  .grossAmountsByMonth(grossAmountsByMonth)
  .federalIncomeTaxWithheld(23323.23)
  .year(2022)
  .build();

AboundBulkResponse<Document> response = abound
  .documents()
  .create(userId, Collections.singletonList(form1099KDocumentRequest));

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": "1099k",
                "year": 2022,
                "payerId": "<<testPayerId>>",
                "payerClassification": "PSE",
                "transactionsReportedClassification": "paymentCard",
                "pseName": "Payment Entity",
                "psePhoneNumber": "5555555555",
                "accountNumber": "1234567890",
                "aggregateGrossAmount": 23323.23,
                "aggregateGrossAmountCardNotPresent": 23323.23,
                "merchantCategoryCode": "4582",
                "numberOfPaymentTransactions": 767,
                "federalIncomeTaxWithheld": 23323.23,
                "grossAmountsByMonth": {
                    "january": 23323.23,
                    "february": 23323.23,
                    "march": 23323.23,
                    "april": 23323.23,
                    "may": 23323.23,
                    "june": 23323.23,
                    "july": 23323.23,
                    "august": 23323.23,
                    "september": 23323.23,
                    "october": 23323.23,
                    "november": 23323.23,
                    "december": 23323.23
                },
                "stateTaxInfo": [
                    {
                        "filingState": "CA",
                        "payerStateId": "1234567891",
                        "stateTaxWithheld": 194.23
                    },
                    {
                        "filingState": "AZ",
                        "payerStateId": "1234567892",
                        "stateTaxWithheld": 194.23
                    }
                ]
            }
        ]
    }`)

    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 = "1099k",
      year = 2022,
      payerId = "<<testPayerId>>",
      payerClassification = "PSE",
      transactionsReportedClassification = "paymentCard",
      pseName = "Payment Entity",
      psePhoneNumber = "55555555555",
      accountNumber = "1234567890",
      aggregateGrossAmount = 23323.23,
      aggregateGrossAmountCardNotPresent = 23323.23,
      merchantCategoryCode = "4582",
      numberOfPaymentTransactions = 767,
      federalIncomeTaxWithheld = 23323.23,
      grossAmountsByMonth = new {
        january = 23323.23,
        february = 23323.23,
        march = 23323.23,
        april = 23323.23,
        may = 23323.23,
        june = 23323.23,
        july = 23323.23,
        august = 23323.23,
        september = 23323.23,
        october = 23323.23,
        november = 23323.23,
        december = 23323.23
      },
      stateTaxInfo = new[] {
        new {
          filingState = "CA",
          payerStateId = "1234567891",
          stateTaxWithheld = 194.23
        },
        new {
          filingState = "AZ",
          payerStateId = "1234567892",
          stateTaxWithheld = 194.23
        }
      }
    }
  }
});
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: '1099k',
      year: 2022,
      payerId: '<<testPayerId>>',
      payerClassification: 'PSE',
      transactionsReportedClassification: 'paymentCard',
      pseName: 'Payment Entity',
      psePhoneNumber: '55555555555',
      accountNumber: '1234567890',
      aggregateGrossAmount: 23323.23,
      aggregateGrossAmountCardNotPresent: 23323.23,
      merchantCategoryCode: '4582',
      numberOfPaymentTransactions: 767,
      federalIncomeTaxWithheld: 23323.23,
      grossAmountsByMonth: {
        january: 23323.23,
        february: 23323.23,
        march: 23323.23,
        april: 23323.23,
        may: 23323.23,
        june: 23323.23,
        july: 23323.23,
        august: 23323.23,
        september: 23323.23,
        october: 23323.23,
        november: 23323.23,
        december: 23323.23
      },
      stateTaxInfo: [
        {
          filingState: 'CA',
          payerStateId: '1234567891',
          stateTaxWithheld: 194.23
        },
        {
          filingState: 'AZ',
          payerStateId: '1234567892',
          stateTaxWithheld: 194.23
        }
      ]
    }
  ]
}

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-K.pdf?AWSAccessKeyId=AKIA6C6AUYYBZMXK74XQ&Expires=1630612016&Signature=%2BYaWwX3GPId1QAzDrVPY3Meeycs%3D",
      "documentName": "2022 Form 1099-K",
      "type": "1099k",
      "year": "2022",
      "status": "created",
      "createdTimestamp": 1628275165630
    }
  ]
}

Form 1099-K Fields

Below is the Form 1099-K with our fields overlaid. Note that to fit user information is displayed for individuals, if business information is available that will be displayed instead.

Form 1099-K Definitions

FieldForm 1099-KDescription
documentId--The unique id generated by Abound® API to designate this form. 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 1099k.
payerId--Unique ID associated with the Payer. Store this value in your database.
year--This is the tax year associated with the Form 1099-K issued.
isCorrectedCorrected box(Optional) If true, the corrected checkbox will be marked on the document. Defaults to false.
accountNumberAccount numberMay show an account number or other unique number the PSE assigned to distinguish a account.
payerClassificationCheck to indicate the payer's classification type:Checkbox to mark either:

- Payment settlement entity (PSE)
- Electronic Payment Facilitator
(EPF)/Other third party
transactionsReportedClassificationCheck to indicate transactions reported are:Checkbox to mark either:

- Payment card
- Third party network
pseNamePSE'S name and telephone numberRequired if paymentSettlementEntity is checked.
psePhoneNumberPSE'S name and telephone numberRequired if paymentSettlementEntity is checked
aggregateGrossAmountBox 1a -- Gross amount of payment card/third party network transactions($) aggregate gross amount of payment card/third party network transactions made to you through the PSE during the calendar year.
aggregateGrossAmountCardNotPresentBox 1b -- Card Not Present transactions($) Shows the aggregate gross amount of all reportable payment transactions made to you through the PSE during the calendar year where the card was not present at the time of the transaction or the card number was keyed into the terminal. Typically, this relates to online sales, phone sales, or catalogue sales. If the box for third party network is checked, or if these are third party network transactions, Card Not Present transactions will not be reported.
merchantCategoryCodeBox 2 -- Merchant category codePayment brands use merchant category codes (MCCs) to
classify merchants and businesses by the type of goods or services provided. It is a four (4) digit code. This may be left blank.
numberOfPaymentTransactionsBox 3 -- Number of payment transactionsShows the number of payment transactions (not including refund transactions) processed through the payment card/ third party network.
federalIncomeTaxWithheldBox 4 -- Federal income tax withheldAbound currently does not support non-zero values in this field. Please contact us for more information.
grossAmountsByMonth.januaryBox 5a -- January($) Show the gross amount of payment card/third party network transactions made to you for each month of the calendar year
grossAmountsByMonth.februaryBox 5a -- February($)
grossAmountsByMonth.marchBox 5a -- March($)
grossAmountsByMonth.aprilBox 5a -- April($)
grossAmountsByMonth.mayBox 5a -- May($)
grossAmountsByMonth.juneBox 5a -- June($)
grossAmountsByMonth.julyBox 5a -- July($)
grossAmountsByMonth.augustBox 5a -- August($)
grossAmountsByMonth.septemberBox 5a -- September($)
grossAmountsByMonth.octoberBox 5a -- October($)
grossAmountsByMonth.novemberBox 5a -- November($)
grossAmountsByMonth.decemberBox 5a -- December($)
filingStateNot displayed on form. Abbreviation for the state to which the 1099 will be reported.
userStateIdBox 7 State identification no.Up to two (2) states per Form 1099-K.
stateTaxWithheldBox 8 State income tax withheldAbound currently does not support non-zero values in this field. Please contact us for more information.