curl --request POST \
--url https://api.revenuebase.ai/v2/contact/enrich \
--header 'Content-Type: application/json' \
--header 'X-Key: <api-key>' \
--data '
{
"personIds": [
"rb-pab23456t-rb-oadkxzpcq",
"rb-pab2346sr-rb-oacopeifk"
],
"columns": [
"RBID_PAO",
"FULL_NAME_PER",
"JOB_TITLE_PER",
"COMPANY_NAME_ORG",
"EMAIL_ADDRESS_PER"
],
"reveal": [
"email"
]
}
'import requests
url = "https://api.revenuebase.ai/v2/contact/enrich"
payload = {
"personIds": ["rb-pab23456t-rb-oadkxzpcq", "rb-pab2346sr-rb-oacopeifk"],
"columns": ["RBID_PAO", "FULL_NAME_PER", "JOB_TITLE_PER", "COMPANY_NAME_ORG", "EMAIL_ADDRESS_PER"],
"reveal": ["email"]
}
headers = {
"X-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
personIds: ['rb-pab23456t-rb-oadkxzpcq', 'rb-pab2346sr-rb-oacopeifk'],
columns: [
'RBID_PAO',
'FULL_NAME_PER',
'JOB_TITLE_PER',
'COMPANY_NAME_ORG',
'EMAIL_ADDRESS_PER'
],
reveal: ['email']
})
};
fetch('https://api.revenuebase.ai/v2/contact/enrich', 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.revenuebase.ai/v2/contact/enrich",
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([
'personIds' => [
'rb-pab23456t-rb-oadkxzpcq',
'rb-pab2346sr-rb-oacopeifk'
],
'columns' => [
'RBID_PAO',
'FULL_NAME_PER',
'JOB_TITLE_PER',
'COMPANY_NAME_ORG',
'EMAIL_ADDRESS_PER'
],
'reveal' => [
'email'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-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.revenuebase.ai/v2/contact/enrich"
payload := strings.NewReader("{\n \"personIds\": [\n \"rb-pab23456t-rb-oadkxzpcq\",\n \"rb-pab2346sr-rb-oacopeifk\"\n ],\n \"columns\": [\n \"RBID_PAO\",\n \"FULL_NAME_PER\",\n \"JOB_TITLE_PER\",\n \"COMPANY_NAME_ORG\",\n \"EMAIL_ADDRESS_PER\"\n ],\n \"reveal\": [\n \"email\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-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.revenuebase.ai/v2/contact/enrich")
.header("X-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"personIds\": [\n \"rb-pab23456t-rb-oadkxzpcq\",\n \"rb-pab2346sr-rb-oacopeifk\"\n ],\n \"columns\": [\n \"RBID_PAO\",\n \"FULL_NAME_PER\",\n \"JOB_TITLE_PER\",\n \"COMPANY_NAME_ORG\",\n \"EMAIL_ADDRESS_PER\"\n ],\n \"reveal\": [\n \"email\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.revenuebase.ai/v2/contact/enrich")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"personIds\": [\n \"rb-pab23456t-rb-oadkxzpcq\",\n \"rb-pab2346sr-rb-oacopeifk\"\n ],\n \"columns\": [\n \"RBID_PAO\",\n \"FULL_NAME_PER\",\n \"JOB_TITLE_PER\",\n \"COMPANY_NAME_ORG\",\n \"EMAIL_ADDRESS_PER\"\n ],\n \"reveal\": [\n \"email\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"matches": {
"rb-pab23456t-rb-oadkxzpcq": {
"RBID_PAO": "rb-pab23456t-rb-oadkxzpcq",
"FULL_NAME_PER": "Matthew Tobin",
"JOB_TITLE_PER": "Senior Vice President Business Development",
"COMPANY_NAME_ORG": "Ecapital Corp",
"EMAIL_ADDRESS_PER": "mtobin@ecapital.com"
},
"rb-pab2346sr-rb-oacopeifk": {
"RBID_PAO": "rb-pab2346sr-rb-oacopeifk",
"FULL_NAME_PER": "Katherine Collins",
"JOB_TITLE_PER": "AVP of Claim Operations",
"COMPANY_NAME_ORG": "Travelers",
"EMAIL_ADDRESS_PER": "katherine.collins@travelers.com"
}
},
"columns": [
"RBID_PAO",
"FULL_NAME_PER",
"JOB_TITLE_PER",
"COMPANY_NAME_ORG",
"EMAIL_ADDRESS_PER"
],
"matched": 2,
"total": 2
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Enrich selected contacts
Look up contact records by email address or by IDs selected from View.
curl --request POST \
--url https://api.revenuebase.ai/v2/contact/enrich \
--header 'Content-Type: application/json' \
--header 'X-Key: <api-key>' \
--data '
{
"personIds": [
"rb-pab23456t-rb-oadkxzpcq",
"rb-pab2346sr-rb-oacopeifk"
],
"columns": [
"RBID_PAO",
"FULL_NAME_PER",
"JOB_TITLE_PER",
"COMPANY_NAME_ORG",
"EMAIL_ADDRESS_PER"
],
"reveal": [
"email"
]
}
'import requests
url = "https://api.revenuebase.ai/v2/contact/enrich"
payload = {
"personIds": ["rb-pab23456t-rb-oadkxzpcq", "rb-pab2346sr-rb-oacopeifk"],
"columns": ["RBID_PAO", "FULL_NAME_PER", "JOB_TITLE_PER", "COMPANY_NAME_ORG", "EMAIL_ADDRESS_PER"],
"reveal": ["email"]
}
headers = {
"X-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
personIds: ['rb-pab23456t-rb-oadkxzpcq', 'rb-pab2346sr-rb-oacopeifk'],
columns: [
'RBID_PAO',
'FULL_NAME_PER',
'JOB_TITLE_PER',
'COMPANY_NAME_ORG',
'EMAIL_ADDRESS_PER'
],
reveal: ['email']
})
};
fetch('https://api.revenuebase.ai/v2/contact/enrich', 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.revenuebase.ai/v2/contact/enrich",
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([
'personIds' => [
'rb-pab23456t-rb-oadkxzpcq',
'rb-pab2346sr-rb-oacopeifk'
],
'columns' => [
'RBID_PAO',
'FULL_NAME_PER',
'JOB_TITLE_PER',
'COMPANY_NAME_ORG',
'EMAIL_ADDRESS_PER'
],
'reveal' => [
'email'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-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.revenuebase.ai/v2/contact/enrich"
payload := strings.NewReader("{\n \"personIds\": [\n \"rb-pab23456t-rb-oadkxzpcq\",\n \"rb-pab2346sr-rb-oacopeifk\"\n ],\n \"columns\": [\n \"RBID_PAO\",\n \"FULL_NAME_PER\",\n \"JOB_TITLE_PER\",\n \"COMPANY_NAME_ORG\",\n \"EMAIL_ADDRESS_PER\"\n ],\n \"reveal\": [\n \"email\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-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.revenuebase.ai/v2/contact/enrich")
.header("X-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"personIds\": [\n \"rb-pab23456t-rb-oadkxzpcq\",\n \"rb-pab2346sr-rb-oacopeifk\"\n ],\n \"columns\": [\n \"RBID_PAO\",\n \"FULL_NAME_PER\",\n \"JOB_TITLE_PER\",\n \"COMPANY_NAME_ORG\",\n \"EMAIL_ADDRESS_PER\"\n ],\n \"reveal\": [\n \"email\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.revenuebase.ai/v2/contact/enrich")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"personIds\": [\n \"rb-pab23456t-rb-oadkxzpcq\",\n \"rb-pab2346sr-rb-oacopeifk\"\n ],\n \"columns\": [\n \"RBID_PAO\",\n \"FULL_NAME_PER\",\n \"JOB_TITLE_PER\",\n \"COMPANY_NAME_ORG\",\n \"EMAIL_ADDRESS_PER\"\n ],\n \"reveal\": [\n \"email\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"matches": {
"rb-pab23456t-rb-oadkxzpcq": {
"RBID_PAO": "rb-pab23456t-rb-oadkxzpcq",
"FULL_NAME_PER": "Matthew Tobin",
"JOB_TITLE_PER": "Senior Vice President Business Development",
"COMPANY_NAME_ORG": "Ecapital Corp",
"EMAIL_ADDRESS_PER": "mtobin@ecapital.com"
},
"rb-pab2346sr-rb-oacopeifk": {
"RBID_PAO": "rb-pab2346sr-rb-oacopeifk",
"FULL_NAME_PER": "Katherine Collins",
"JOB_TITLE_PER": "AVP of Claim Operations",
"COMPANY_NAME_ORG": "Travelers",
"EMAIL_ADDRESS_PER": "katherine.collins@travelers.com"
}
},
"columns": [
"RBID_PAO",
"FULL_NAME_PER",
"JOB_TITLE_PER",
"COMPANY_NAME_ORG",
"EMAIL_ADDRESS_PER"
],
"matched": 2,
"total": 2
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Credits and plans
PAYG is Pay-as-you-go. AYCE is All-you-can-eat.| Usage | PAYG | AYCE |
|---|---|---|
| Returned contact match | 1 credit per match | Unlimited 0 credits |
| Revealed email | +1 credit per populated email | Unlimited 0 credits |
| Revealed mobile | +10 credits per populated mobile | Unlimited 0 credits |
| Input identifiers per request | 10,000 combined | 10,000 combined |
reveal
add email or mobile charges. Unmatched inputs cost 0 credits.
There is no SmartSearch fee on this endpoint because it takes
identifiers rather than a search filter.
When to use Enrich
Use Enrich when you know which contacts you want. SendRBID_PAO
values as personIds to retrieve people selected from a free View
sample, or send existing email addresses as emails to look up
their contact and company fields.
| You have | Use |
|---|---|
| Selected IDs from View, or a list of known emails | Contact Enrich |
| A filter describing the people you want | Count and View, then Preview or Export |
| Company domains, company LinkedIn URLs, or company RBIDs | Company Enrich |
| Email addresses whose deliverability you need to check | Email Verification |
Example: retrieve contacts selected from View
Set your API key asREVENUEBASE_API_KEY. In your application, use
real RBID_PAO values returned by View. The sample below contains
the two real IDs returned by View, and selects email without mobile.
reveal, or sending
null, selects both email and mobile. Set columns as well:
fewer returned fields do not remove charges for selected details.curl --include --request POST 'https://api.revenuebase.ai/v2/contact/enrich' \
--header "X-Key: $REVENUEBASE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"personIds": [
"rb-pab23456t-rb-oadkxzpcq",
"rb-pab2346sr-rb-oacopeifk"
],
"columns": [
"RBID_PAO",
"FULL_NAME_PER",
"JOB_TITLE_PER",
"COMPANY_NAME_ORG",
"EMAIL_ADDRESS_PER"
],
"reveal": [
"email"
]
}'
{
"matches": {
"rb-pab23456t-rb-oadkxzpcq": {
"RBID_PAO": "rb-pab23456t-rb-oadkxzpcq",
"FULL_NAME_PER": "Matthew Tobin",
"JOB_TITLE_PER": "Senior Vice President Business Development",
"COMPANY_NAME_ORG": "Ecapital Corp",
"EMAIL_ADDRESS_PER": "mtobin@ecapital.com"
},
"rb-pab2346sr-rb-oacopeifk": {
"RBID_PAO": "rb-pab2346sr-rb-oacopeifk",
"FULL_NAME_PER": "Katherine Collins",
"JOB_TITLE_PER": "AVP of Claim Operations",
"COMPANY_NAME_ORG": "Travelers",
"EMAIL_ADDRESS_PER": "katherine.collins@travelers.com"
}
},
"columns": [
"RBID_PAO",
"FULL_NAME_PER",
"JOB_TITLE_PER",
"COMPANY_NAME_ORG",
"EMAIL_ADDRESS_PER"
],
"matched": 2,
"total": 2
}
| Field | What it means |
|---|---|
matches | An object keyed by the matched identifier. Email keys are normalized; person IDs have surrounding whitespace removed. Unmatched inputs have no entry. |
RBID_PAO | The person-at-company identifier, returned even when you omit it from columns. |
columns | Returned field names, including lookup fields and the stable identifier. Enrich does not return columnLabels. |
matched | Number of returned match entries, rather than distinct people. |
total | Number of valid, distinct input identifiers accepted after normalization and duplicate removal. |
Send a list in one request
You can sendemails, personIds, or both. The combined limit is
10,000 identifiers after normalization and duplicate removal.
For example, 6,000 emails and 4,000 person IDs fit in one request.
Send the lists as JSON arrays; this endpoint does not upload a file.
For each identifier, Enrich returns at most one matching contact row.
If an identifier matches multiple rows, the endpoint selects one.
It does not return every company or employment record for that person.
Sending the same contact’s email and person ID can produce two match
entries, one under each key. PAYG charges each returned entry. Use one
identifier per contact when you want to avoid retrieving it twice.
Control the credit hold and returned fields
A PAYG hold assumes every submitted array entry will match a row with every selected detail. The hold counts entries before normalization and duplicate removal. Remove duplicates before sending to keep that amount down.reveal | Maximum PAYG hold per submitted entry |
|---|---|
[] | 1 credit |
["email"] | 2 credits |
["mobile"] | 11 credits |
["email", "mobile"] | 12 credits |
reveal: ["email"], PAYG would reserve
4 credits. Both matches have an email, so the final PAYG charge
would also be 4 credits. AYCE used 0 credits for this capture. A 402 INSUFFICIENT_CREDITS
response rejects the request before lookup, even when you expect
many identifiers to be unmatched. Split the list or select fewer
details to lower the hold.
| Option | Behavior |
|---|---|
emails | Known email addresses to match. Providing an email as a lookup key does not waive an email-reveal charge. Use reveal: [] for profile fields only. |
personIds | RBID_PAO values, such as those returned by View. These identify a person at a company. |
columns | Exact field names to return, in addition to lookup fields and RBID_PAO. Omitted, null, or [] returns those identifiers only. ["*"] does not expand to all fields on Contact Enrich. |
reveal | On PAYG, select email, mobile, both, or neither. Omitted or null selects both. Charges follow this choice even when a priced field is excluded from columns. |
reveal
become hasEmail or hasMobile availability booleans. On AYCE,
columns controls the returned fields; reveal does not mask them.
Read X-Credits-Charged and X-Credits-Remaining on a metered response
for the settled charge and remaining balance.
Errors and retries
| Response | What to do |
|---|---|
400 for no valid identifiers | Send at least one usable email or person ID. |
400 for too many identifiers | Split the combined list into requests containing at most 10,000 accepted identifiers. |
402 INSUFFICIENT_CREDITS | Reduce the input list or selected details, or add credits. creditsRequired reports the hold and creditsAvailable your balance. |
422 | Correct the request shape or field types; emails and personIds must be arrays. |
429 | Follow Retry-After or wait until X-RateLimit-Reset. |
503 CREDITS_UNAVAILABLE | Credit metering is unavailable. Follow Retry-After before retrying. |
matches: {} and matched: 0 for 0 credits.
Repeating a paid request can charge again, including for the same
identifiers. After an ambiguous timeout, the earlier call may already
have completed; do not assume a retry will avoid another charge.
Next step
Join the returnedmatches to your input identifiers in your
application. To retrieve a broader audience rather than a known list,
begin with Count and View.
For a downloadable file, use Estimate
and Export.Authorizations
Body
Contact lookup by emails, personIds (RBID_PAO), or both. Up to 10,000 normalized distinct identifiers combined. Specify columns and reveal explicitly to control returned fields and PAYG credit costs.
Existing email addresses to match to contact records. May be combined with personIds within the shared 10,000-identifier cap after normalization and deduplication. An email used as a lookup key does not waive the email-reveal charge on PAYG.
RBID_PAO person-at-company identifiers, such as those returned by View. May be combined with emails within the shared 10,000-identifier cap. Sending both identifiers for the same contact can return two billable match entries on PAYG.
Exact fields to return, plus the lookup fields and RBID_PAO. Omitted, null, or [] returns those identifiers only; ["*"] does not expand on Contact Enrich. Unknown names are ignored. PAYG charges for selected revealed details still apply when their columns are omitted.
On PAYG, select email (+1 per populated value), mobile (+10), both, or neither ([]), in addition to 1 per returned match. Omitted or null selects both. The hold uses submitted array entries before normalization or deduplication. On AYCE, columns controls returned fields and reveal does not mask them.
Response
Successful Response
The response is of type Response Enrich V1 Enrich Post · object.
Was this page helpful?
