1. Get Approval for EFTPS Enrollment

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.

  1. Create a Payment Method

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 Payments

IRS Tax Payments may come from a paymentMethod whose "accountClass" is either "checking" or "savings"

curl \
  --request POST \
  --url<<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(
      accountNumber: "1234567890",
      routingNumber: "121042882",
      accountType: "personal",
      accountClass: "checking",

import requests

url = "<<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)

// import com.squareup.okhttp.*;
// import;
// import;
// import com.withabound.AboundConfig;
// import com.withabound.models.*;
// import com.withabound.resources.base*;

AboundConfig aboundConfig = new AboundConfig(
Abound abound = new Abound(aboundConfig);

String userId = "<<testUserId>>";

PaymentMethodRequest paymentMethodRequest = PaymentMethodRequest.builder()

AboundResponse<PaymentMethod> response = abound.paymentMethods().create(userId, paymentMethodRequest);

package main

import (

func main() {

    url := "<<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)


// using RestSharp;

var client = new RestClient("<<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("<<testUserId>>/paymentMethods")
requestBody = {
  paymentMethod: {
    accountNumber: '1234567890',
    routingNumber: '121042882',
    accountType: 'personal',
    accountClass: 'checking'

http =, url.port)
http.use_ssl = true

request =
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