State Tax Payments

Submitting a State Tax Payment

Submitting a tax payment for a specific state is as simple as passing the two-character state code in the entity field. The following code snippet provides an example of how to initiate a tax payment to California (notice the "entity": "CA"). State tax payments also require passing the amount as a whole number.

❗️

The paymentMethod associated with a state tax payment must be a checking account.
{ "accountClass" : "checking" }

curl \
  --request POST \
  --url https://sandbox-api.withabound.com/v2/users/<<testUserId>>/taxPayments \
  --header 'Authorization: Bearer <<apiKey>>' \
  --header 'Content-Type: application/json' \
  --data '{
    "taxPayment": {
      "amount": 877,
      "period": "Q3",
      "year": "2020",
      "entity": "CA",
      "paymentMethodId": "<<testPaymentMethodId>>"
    }
  }'
const { default: Abound, Environment } = require("@withabound/node-sdk");

const abound = new Abound({
  appId: "<<sandbox_app_id>>",
  appSecret: "<<sandbox_app_secret>>",
  environment: Environment.SANDBOX,
  apiVersion: "v2",
});

(async () => {
  const response = await abound.taxPayments.create(
    "<<testUserId>>",
    {
      amount: 877,
      period: "Q3",
      year: "2020",
      entity: "CA",
      paymentMethodId:
        "<<testPaymentMethodId>>",
    }
  );

  console.log(response);
})();
import requests

url = "https://sandbox-api.withabound.com/v2/users/<<testUserId>>/taxPayments"

payload = {"taxPayment": {
        "amount": 877,
        "period": "Q3",
        "year": "2020",
        "entity": "CA",
        "paymentMethodId": "<<testPaymentMethodId>>"
    }}
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;

OkHttpClient client = new OkHttpClient();

JsonObject requestBody = new JsonObject();
JsonObject taxPayment = new JsonObject();

taxPayment.addProperty("amount", 877);
taxPayment.addProperty("period", "Q3");
taxPayment.addProperty("year", "2020");
taxPayment.addProperty("entity", "CA");
taxPayment.addProperty("paymentMethodId", "<<testPaymentMethodId>>");

requestBody.add("taxPayment", taxPayment);

MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, requestBody.toString());
Request request = new Request.Builder()
  .url("https://sandbox-api.withabound.com/v2/users/<<testUserId>>/taxPayments")
  .post(body)
  .addHeader("Accept", "application/json")
  .addHeader("Content-Type", "application/json")
  .addHeader("Authorization", "Bearer <<apiKey>>")
  .build();

Response response = client.newCall(request).execute();
package main

import (
    "bytes"
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://sandbox-api.withabound.com/v2/users/<<testUserId>>/taxPayments"

    var requestBody = []byte(`{
        "taxPayment": {
            "amount": 877,
            "period": "Q3",
            "year": "2020",
            "entity": "CA",
            "paymentMethodId": "<<testPaymentMethodId>>"
        }
    }`)

    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/v2/users/<<testUserId>>/taxPayments");
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 {
  taxPayment = new {
    amount = 877,
    period = "Q3",
    year = "2020",
    entity = "CA",
    paymentMethodId = "<<testPaymentMethodId>>"
  }
});
IRestResponse response = client.Execute(request);
require 'uri'
require 'net/http'
require 'openssl'
require 'json'

url = URI("https://sandbox-api.withabound.com/v2/users/<<testUserId>>/taxPayments")
requestBody = {
  taxPayment: {
    amount: 877,
    period: 'Q3',
    year: '2020',
    entity: 'CA',
    paymentMethodId: '<<testPaymentMethodId>>'
  }
}

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

Dates & Deadlines

Abound requires that you create your state tax payment (POST /user/{userId}/taxPayments) at least five (5) days before the deadline.

Quarter

Payment Date

Abound Payment Deadline

Q1 2021

April 15th, 2021 (3.5 months into the year)

April 10th, 2021 (5 days before payment date)

Q2 2021

June 15th, 2021 (2 months after last payment date)

June 10th, 2021 (5 days before payment date)

Q3 2021

September 15th, 2021 (3 months after last payment date)

September 10th, 2021 (5 days before payment date)

Q4 2021

January 18th, 2022 (4 months after last payment date)

January 13th, 2022 (5 days before payment date)

Monitor a State Tax Payment

After your state tax payment has been submitted, Abound uses webhooks to inform your backend when the tax payment has been updated. Read our Webhooks guide to learn more.


Did this page help you?