Estimate billing
curl --request POST \
--url https://api.truthlocks.com/v1/billing/estimate \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"plan": "<string>",
"addons": [
"<string>"
]
}
'import requests
url = "https://api.truthlocks.com/v1/billing/estimate"
payload = {
"plan": "<string>",
"addons": ["<string>"]
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({plan: '<string>', addons: ['<string>']})
};
fetch('https://api.truthlocks.com/v1/billing/estimate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.truthlocks.com/v1/billing/estimate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'plan' => '<string>',
'addons' => [
'<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.truthlocks.com/v1/billing/estimate"
payload := strings.NewReader("{\n \"plan\": \"<string>\",\n \"addons\": [\n \"<string>\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.truthlocks.com/v1/billing/estimate")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"plan\": \"<string>\",\n \"addons\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.truthlocks.com/v1/billing/estimate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"plan\": \"<string>\",\n \"addons\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"subtotal": 123,
"tax": 123,
"total": 123,
"currency": "<string>",
"proration": 123
}{
"code": "AUTH_REQUIRED",
"message": "Authentication required",
"http_status": 401
}Billing
Estimate plan cost
Get a plan recommendation and estimated monthly cost based on your expected usage.
POST
/
v1
/
billing
/
estimate
Estimate billing
curl --request POST \
--url https://api.truthlocks.com/v1/billing/estimate \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"plan": "<string>",
"addons": [
"<string>"
]
}
'import requests
url = "https://api.truthlocks.com/v1/billing/estimate"
payload = {
"plan": "<string>",
"addons": ["<string>"]
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({plan: '<string>', addons: ['<string>']})
};
fetch('https://api.truthlocks.com/v1/billing/estimate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.truthlocks.com/v1/billing/estimate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'plan' => '<string>',
'addons' => [
'<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.truthlocks.com/v1/billing/estimate"
payload := strings.NewReader("{\n \"plan\": \"<string>\",\n \"addons\": [\n \"<string>\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.truthlocks.com/v1/billing/estimate")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"plan\": \"<string>\",\n \"addons\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.truthlocks.com/v1/billing/estimate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"plan\": \"<string>\",\n \"addons\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"subtotal": 123,
"tax": 123,
"total": 123,
"currency": "<string>",
"proration": 123
}{
"code": "AUTH_REQUIRED",
"message": "Authentication required",
"http_status": 401
}POST /v1/billing/estimate
Request body
string
ISO 3166-1 alpha-2 country code (e.g.,
US, NG). Used to determine provider routing and regional pricing.integer
Expected number of verifications per month.
integer
Number of issuers your organization requires.
integer
Number of webhook endpoints you plan to configure.
integer
Expected storage in gigabytes.
integer
Number of team members.
string
Optional contract type:
ENTERPRISE_CONTRACT or GOVERNMENT_PROCUREMENT. When set, the estimate automatically recommends the Enterprise plan.Response
string
The plan that best fits your requirements (e.g.,
plan_starter, plan_business).object[]
Add-ons the estimate suggests based on your needs (e.g., extra seats beyond the plan limit).
number
Projected monthly cost in USD.
string
Currency code (
USD).string[]
Notes about the estimate (e.g., volume discounts, custom pricing).
object
For a detailed line-item breakdown of costs, use the projected invoice endpoint instead.

