API Quickstart
Enrich any company from a domain name — get firmographics, social profiles, AI insights, and B2B Match scoring via the REST API.
You can enrich companies, upload CSV files, and export results from the Dashboard — no code required.
Step 1: Get Your API Key
- Sign in to the Vera Dashboard
- Navigate to Dashboard > API Keys
- Click Create API Key and copy your key
Your API key looks like this:
vera_live_abc123xyz789...
Your API key grants access to your account. Never commit it to version control or share it publicly.
Step 2: Make Your First Request
Vera uses an asynchronous enrichment pattern. First, submit a domain to start enrichment:
- cURL
- JavaScript
- Python
curl -X POST https://api.veraenrich.com/enrich \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"domain": "stripe.com"}'
Response (202 Accepted):
{
"status": "processing",
"jobId": "01234567-89ab-cdef-0123-456789abcdef",
"domain": "stripe.com",
"statusEndpoint": "/api/enrich/01234567-89ab-cdef-0123-456789abcdef",
"estimatedDuration": 12000
}
const response = await fetch('https://api.veraenrich.com/enrich', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({ domain: 'stripe.com' })
});
const job = await response.json();
console.log(job.jobId); // "01234567-89ab-cdef-0123-456789abcdef"
console.log(job.status); // "processing"
import requests
response = requests.post(
'https://api.veraenrich.com/enrich',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
json={'domain': 'stripe.com'}
)
job = response.json()
print(job['jobId']) # "01234567-89ab-cdef-0123-456789abcdef"
print(job['status']) # "processing"
Step 3: Poll for Results
Use the jobId to check the status and retrieve results:
- cURL
- JavaScript
- Python
curl https://api.veraenrich.com/enrich/01234567-89ab-cdef-0123-456789abcdef \
-H "Authorization: Bearer YOUR_API_KEY"
Response when processing:
{
"status": "processing",
"domain": "stripe.com",
"createdAt": "2026-02-01T10:30:00Z",
"estimatedCompletion": "2026-02-01T10:30:12Z"
}
Response when completed:
{
"status": "completed",
"domain": "stripe.com",
"data": {
"name": "Stripe",
"domain": "stripe.com",
"description": "Financial infrastructure for the internet",
"industry": "Financial Technology",
"employeeCount": "8000-10000",
"location": "San Francisco, CA",
"businessStage": "enterprise",
"fundingStatus": "Series I",
"socialProfiles": {
"linkedin": "https://linkedin.com/company/stripe",
"twitter": "https://twitter.com/stripe"
},
"confidence": 92,
"sources": ["website", "linkedin", "ai"]
}
}
async function pollForResults(jobId) {
const maxAttempts = 30;
const delayMs = 2000;
for (let i = 0; i < maxAttempts; i++) {
const response = await fetch(
`https://api.veraenrich.com/enrich/${jobId}`,
{ headers: { 'Authorization': 'Bearer YOUR_API_KEY' } }
);
const result = await response.json();
if (result.status === 'completed') {
return result.data;
}
if (result.status === 'failed') {
throw new Error(result.error);
}
// Still processing, wait and retry
await new Promise(resolve => setTimeout(resolve, delayMs));
}
throw new Error('Timeout waiting for enrichment');
}
// Usage
const companyData = await pollForResults(job.jobId);
console.log(companyData.name); // "Stripe"
import time
import requests
def poll_for_results(job_id, max_attempts=30, delay=2):
for _ in range(max_attempts):
response = requests.get(
f'https://api.veraenrich.com/enrich/{job_id}',
headers={'Authorization': 'Bearer YOUR_API_KEY'}
)
result = response.json()
if result['status'] == 'completed':
return result['data']
if result['status'] == 'failed':
raise Exception(result['error'])
# Still processing, wait and retry
time.sleep(delay)
raise Exception('Timeout waiting for enrichment')
# Usage
company_data = poll_for_results(job['jobId'])
print(company_data['name']) # "Stripe"
Understanding the Response
When enrichment completes, you receive comprehensive company data:
| Field | Type | Description |
|---|---|---|
name | string | Company name |
domain | string | Normalized domain |
description | string | Company description |
industry | string | Industry classification |
employeeCount | string | Employee range (e.g., "50-100") |
location | string | Headquarters location |
businessStage | string | startup, growth, scaleup, enterprise, or public |
fundingStatus | string | Funding round (e.g., "Series A") |
socialProfiles | object | LinkedIn, Twitter, etc. |
confidence | number | Data quality score (0-100) |
sources | array | Data sources used |
See the full schema for all available fields.
Every response includes X-RateLimit-Remaining and X-RateLimit-Reset headers. See Rate Limits for details and retry patterns.