Getting Started
1: Retrieve Your API Keys
Create an account to start integrating our APIs 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/<<apiVersion>>/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: "<<apiVersion>>",
});
(async () => {
const response = await abound.users.list();
console.log(response);
})();
import requests
url = "https://sandbox-api.withabound.com/<<apiVersion>>/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.<<apiVersionUppercase>>
);
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/<<apiVersion>>/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/<<apiVersion>>/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/<<apiVersion>>/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 from your backend. Your appSecret should never be shared on the client-side or stored directly in your code. |
sandbox-api.withabound.com/v3 | Stateful sandbox environment; use test credentials and build out and test your integration. |
production-api.withabound.com/v3 | Production API environment; this environment is billed and will initiate real money transfers. |
3: Create a User
The User 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/<<apiVersion>>/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
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 Payer 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/<<apiVersion>>/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
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"
]
}
Updated 3 months ago