Quick Start

1: Retrieve your API keys

Log in or create an account with the Abound Dashboard to find and retrieve your API keys.

API keys are environment specific and can be found on the Keys page.


2: API authentication

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

The bearer token is in the format of: appId.appSecret

The following is an example request that returns all Tin Verifications with the required Authorization header.

curl \
  --request GET \
  --url https://sandbox-api.withabound.com/<<apiVersion_v4>>/tin-verifications \
  --header 'Accept: application/json'
  --header 'Authorization: Bearer <<apiKey_v4>>'
await fetch("https://sandbox-api.withabound.com/<<apiVersion_v4>>/tin-verifications",{
  method: "GET",
  headers: {
    "Accept": "application/json",
    "Authorization": "Bearer <<apiKey_v4>>"
  },
});

import requests

url = "https://sandbox-api.withabound.com/<<apiVersion_v4>>/tin-verifications"

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

response = requests.request("GET", url, headers=headers)
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://sandbox-api.withabound.com/<<apiVersion_v4>>/tin-verifications")

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_v4>>'

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

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

func main() {

	url := "https://sandbox-api.withabound.com/<<apiVersion_v4>>/tin-verifications"

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

	req.Header.Add("Accept", "application/json")
	req.Header.Add("Authorization", "Bearer <<apiKey_v4>>")

	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_v4>>/tin-verifications");
var request = new RestRequest(Method.GET);
request.AddHeader("Accept", "application/json");
request.AddHeader("Authorization", "Bearer <<apiKey_v4>>");

IRestResponse response = client.Execute(request);
ValueDescription
appIdA non-sensitive, public identifier that is used to identify your app.
appSecretA 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/v4Sandbox API environment; use test credentials and build out and test your integration.
production-api.withabound.com/v4Production API environment; this environment is billed and will initiate real interactions with government entities.

3: Make your first sandbox API call

As an example, let's perform a test Tin Verification to see if Ada Lovelace's tax identification number is 111-11-1111.


πŸ“˜

tin test values

In this example, 111111111 is one of our many sandbox tin test values. A complete list of tin test values can be found here.


a. Request a new Tin Verification.

To request a new Tin Verification call POST /tin-verifications.

curl \
  --request POST \
  --url https://sandbox-api.withabound.com/<<apiVersion_v4>>/tin-verifications \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <<apiKey_v4>>' \
  --header 'Content-Type: application/json' \
  --data '{
    "name": "Ada Lovelace",
    "tin": "111111111"
  }'

const response = await fetch("https://sandbox-api.withabound.com/<<apiVersion_v4>>/tin-verifications", {
  method: "POST",
  headers: {
    "Accept": "application/json",
    "Authorization": "Bearer <<apiKey_v4>>"
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    name: "Ada Lovelace",
    tin: "111111111"
  }),
});

console.log(response);
import requests

url = "https://sandbox-api.withabound.com/<<apiVersion_v4>>/tin-verifications"

payload = {
  	"name": "Ada Lovelace",
    "tin": "111111111"
}
headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
    "Authorization": "Bearer <<apiKey_v4>>"
}

response = requests.request("POST", url, json=payload, headers=headers)

print(response.text)
package main

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

func main() {

	url := "https://sandbox-api.withabound.com/<<apiVersion_v4>>/tin-verifications"

	var requestBody = []byte(`{
		"name": "Ada Lovelace",
    "tin": "111111111"
	}`)

	req, _ := http.NewRequest("POST", url, bytes.NewBuffer(requestBody))

	req.Header.Add("Accept", "application/json")
	req.Header.Add("Authorization", "Bearer <<apiKey_v4>>")
	req.Header.Add("Content-Type", "application/json")

	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_v4>>/tin-verifications");
var request = new RestRequest(Method.POST);
request.AddHeader("Accept", "application/json");
request.AddHeader("Authorization", "Bearer <<apiKey_v4>>");
request.AddHeader("Content-Type", "application/json");

request.AddJsonBody(new {
  name = "Ada Lovelace",
  tin = "111111111"
});
IRestResponse response = client.Execute(request);
require 'uri'
require 'net/http'
require 'openssl'
require 'json'

url = URI("https://sandbox-api.withabound.com/<<apiVersion_v4>>/tin-verifications")
requestBody = {
  name: "Ada",
  tin: "Lovelace"
}

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

request = Net::HTTP::Post.new(url)
request["Accept"] = 'application/json'
request["Authorization"] = 'Bearer <<apiKey_v4>>'
request["Content-Type"] = 'application/json'

request.body = requestBody.to_json

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

b. Save the response

The response from POST /tin-verifications is shown below and it's a match!

Ensure that you save the tinVerificationId and the tinFingerprint to your own database for future reference.

{
  "id": "tinVerificationId_sample41SD71AV8f",
  "createdAt": "2023-01-01T00:00:00.000Z",
  "status": "MATCH",
  "name": "Ada Lovelace",
  "tin": "xxxxxxx11",
  "tinType": "INDIVIDUAL",
  "tinFingerprint": "tinFingerprint_samplehy2BWO6JJG"
}