Getting Started

1. Retrieve Your API Keys

Create an Abound account to start integrating Abound into your solution. You can retrieve your API Keys from the dashboard or from the standalone API Keys page.

2. API Authentication

Authentication requires passing your Authentication Bearer token for the desired environment (sandbox or production) in the header of your API request.

The following is an example request that returns all users with the required authentication headers. Simply replace ${appId} and ${appSecret} with your corresponding API keys, which you can find in the API dashboard.

curl \
--request GET \
--url https://sandbox-api.withabound.com/v2/users \
--header 'Authorization: Bearer <<apiKey>>'
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.users.list();
  console.log(response);
})();
import requests

url = "https://sandbox-api.withabound.com/v2/users"

headers = {
    "Accept": "application/json",
    "Authorization": "Bearer <<apiKey>>"
}

response = requests.request("GET", url, headers=headers)

print(response.text)
//import java.io.IOException;
//import com.google.gson.Gson;

//import com.withabound.*;
//import com.withabound.models.users.User;
//import com.withabound.resources.base.AboundBulkResponse;

AboundConfig aboundConfig = new AboundConfig(
  "<<sandbox_app_id>>",
  "<<sandbox_app_secret>>",
  AboundEnvironment.SANDBOX,
  AboundApiVersion.V2
);

Abound abound = new Abound(aboundConfig);
AboundBulkResponse<User> response;
try {
  response = abound.users().list();
  Gson gson = new Gson();
  String json = gson.toJson(response.getData());
  System.out.println(json);
} catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
}
package main

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

func main() {

    url := "https://sandbox-api.withabound.com/v2/users"

    req, _ := http.NewRequest("GET", url, nil)

    req.Header.Add("Accept", "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");
var request = new RestRequest(Method.GET);
request.AddHeader("Accept", "application/json");
request.AddHeader("Authorization", "Bearer <<apiKey>>");
IRestResponse response = client.Execute(request);
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://sandbox-api.withabound.com/v2/users")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Accept"] = 'application/json'
request["Authorization"] = 'Bearer <<apiKey>>'

response = http.request(request)
puts response.read_body

Value

Description

appId

A non-sensitive, public identifier that is used to identify your app.

appSecret

A sensitive, private key used to make secure calls to the Abound API from your backend. Your appSecret should never be shared on the client-side or stored directly in your code.

sandbox-api.withabound.com/v2

Stateful sandbox environment; use test credentials and build out and test your integration.

production-api.withabound.com/v2

Production API environment; this environment is billed and will initiate real money transfers.

3. Create a User

The UserUser - A single end-user of your application. Each user has a unique userId, which should be stored in your database and used to make API requests on behalf of this individual. is the foundational resource of every API call, which can be broken into two steps:

a. Create a User
b. Save the userId

a. Create a User

To create a new User call the POST /users API endpoint.

curl \
  --request POST \
  --url https://sandbox-api.withabound.com/v2/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: "v2",
});

(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/v2/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 java.io.IOException;

//import com.google.gson.Gson;
//import com.withabound.*;
//import com.withabound.models.users.*;
//import com.withabound.resources.base.AboundResponse;


AboundConfig aboundConfig = new AboundConfig(
  "<<sandbox_app_id>>",
  "<<sandbox_app_secret>>",
  AboundEnvironment.SANDBOX,
  AboundApiVersion.V2
);

Abound abound = new Abound(aboundConfig);
try {
  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());
  Gson gson = new Gson();
  String json = gson.toJson(response.getData());
  System.out.println(json);
} catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
}
package main

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

func main() {

    url := "https://sandbox-api.withabound.com/v2/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/v2/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/v2/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

b. Save the userId

The response from POST /users is shown below. Ensure that you save the userId to your own database for future reference.

{
  "data": [
    "userId": "<<testUserId>>",
    "email": "[email protected]"
  ]
}

4. Create a Payer

The PayerPayer - An entity that makes payments for: services performed by independent contractors (1099-NEC), interest on a business debt (1099-INT), and payment card transactions settled on behalf of merchants (1099-K). is a foundational resource for 1099 Filing and Issuance, which can be broken in two steps:

a. Create a Payer
b. Save the payerId

a. Create a Payer

To create a new Payer, call the POST /payers API endpoint.

curl \
  --request POST \
  --url https://sandbox-api.withabound.com/v2/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/v2/payers';
const options = {
  method: 'POST',
  headers: {
    Accept: 'application/json',
    'Content-Type': 'application/json',
    Authorization: 'Bearer <<apiKey>>'
  },
  body: JSON.stringify({
    payers: [
      {
        name: "Hooli",
        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/v2/payers"

payload = {"payers": [
        {
            "name": "Hooli",
            "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 java.io.IOException;
//import java.util.Collections;

//import com.google.gson.Gson;
//import com.withabound.*;
//import com.withabound.models.payers.*;
//import com.withabound.resources.base.AboundBulkResponse;

AboundConfig aboundConfig = new AboundConfig(
  "<<sandbox_app_id>>",
  "<<sandbox_app_secret>>",
  AboundEnvironment.SANDBOX,
  AboundApiVersion.V2
);

Abound abound = new Abound(aboundConfig);
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();

try {
  AboundBulkResponse<Payer> response = abound.payers()
    .create(Collections.singletonList(toCreate));
  Gson gson = new Gson();
  String json = gson.toJson(response.getData());
  System.out.println(json);
package main

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

func main() {

    url := "https://sandbox-api.withabound.com/v2/payers"

    var requestBody = []byte(`{
        "payers": [
            {
                "name": "Hooli",
                "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/v2/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 = "Hooli",
      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/v2/payers")
requestBody = {
  payers: [
    {
      name: 'Hooli',
      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

b. Save the payerId

The response from POST /payers is shown below. It's crucial that you save the payerId to your own database for future reference.

{
  "data": [
    "payerId": "<<testPayerId>>",
    "name": "Hooli",
    "address": "1401 N Shoreline Blvd",
    "address2": "Suite 1",
    "city": "Mountain View",
    "state": "CA",
    "country": "US",
    "zipcode": "94043",
    "phoneNumber": "6501014096"
  ]
}

Did this page help you?