Prerequisites
The first time Abound® submits a tax payment for each of your users, you will need to receive approval for Abound® to enroll that User with EFTPS. The enrollment process is managed by Abound®. You simply need to display the authorization process described in the Representative Approval for EFTPS Enrollment guide.
Production Authorization
Contact Abound® support to receive approval of your authorization to enable your production environment.
Before creating a payment method, you must create a User. The user is the individual for whom you will be submitting the payment request. To create a User, you can follow the Getting Started guide.
️ KYC verification required
When creating a
paymentMethod
in Abound®, you are certifying that you have verified the owner of the payment account by adhering to federal KYC requirements.
A Payment Method represents the bank account from which the tax payment will be charged. For a taxPayment
to the IRS, a Payment Method may be any checking or savings account that has a routing and account number that supports ACH.
Below is an example of how to create a Payment Method that is associated with the user
you created in the previous step.
paymentMethod
for Tax PaymentsIRS Tax Payments may come from a
paymentMethod
whose "accountClass" is either "checking" or "savings"
curl \
--request POST \
--url https://sandbox-api.withabound.com/v2/users/<<testUserId>>/paymentMethods \
--header 'Authorization: Bearer <<apiKey>>' \
--header 'Content-Type: application/json' \
--data '{
"paymentMethod": {
"accountNumber": "1234567890",
"routingNumber": "121042882",
"accountType": "personal",
"accountClass": "checking"
}
}'
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.paymentMethods.create(
"<<testUserId>>",
{
accountNumber: "1234567890",
routingNumber: "121042882",
accountType: "personal",
accountClass: "checking",
}
);
console.log(response);
})();
import requests
url = "https://sandbox-api.withabound.com/v2/users/<<testUserId>>/paymentMethods"
payload = {"paymentMethod": {
"accountNumber": "1234567890",
"routingNumber": "121042882",
"accountType": "personal",
"accountClass": "checking"
}}
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.V2
);
Abound abound = new Abound(aboundConfig);
String userId = "<<testUserId>>";
PaymentMethodRequest paymentMethodRequest = PaymentMethodRequest.builder()
.accountNumber("1234567890")
.routingNumber("121042882")
.accountType(AccountType.BUSINESS)
.accountClass(AccountClass.CHECKING)
.build();
AboundResponse<PaymentMethod> response = abound.paymentMethods().create(userId, paymentMethodRequest);
System.out.println(response.getData())
package main
import (
"bytes"
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://sandbox-api.withabound.com/v2/users/<<testUserId>>/paymentMethods"
var requestBody = []byte(`{
"paymentMethod": {
"accountNumber": "1234567890",
"routingNumber": "121042882",
"accountType": "personal",
"accountClass": "checking"
}
}`)
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>>/paymentMethods");
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 {
paymentMethod = new {
accountNumber = "1234567890",
routingNumber = "121042882",
accountType = "personal",
accountClass = "checking"
}
});
IRestResponse response = client.Execute(request);
require 'uri'
require 'net/http'
require 'openssl'
require 'json'
url = URI("https://sandbox-api.withabound.com/v2/users/<<testUserId>>/paymentMethods")
requestBody = {
paymentMethod: {
accountNumber: '1234567890',
routingNumber: '121042882',
accountType: 'personal',
accountClass: 'checking'
}
}
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
️
Please ensure you are familiar with our dates and deadlines for payments
Updated 1 day ago