Four Ways to Connect

Everything you do in the dashboard — searching contacts, enriching data, managing campaigns — you can also do from AI assistants, scripts, or external tools. Pick whichever fits your workflow.

MCP Server Talk to Kolvera through Claude, Cursor, or any AI assistant. Describe what you need in plain English.
REST API 44 JSON endpoints. Build integrations, connect to Zapier/Make, or sync with your other tools.
Webhooks Get notified instantly when something happens — a reply, an enrichment, credits running low.
CLI Tool 20 commands for power users. Pipe JSON to jq, run batch operations, automate with cron.

Getting Started (5 minutes)

  1. Go to Settings → API Tokens and create a token. Copy the kv_... value.
  2. Choose your method:
    • MCP: Add the config block below to Claude Desktop or Claude Code
    • API: Pass Authorization: Bearer kv_your_token on any /api/v2/ call
    • CLI: Set KOLVERA_API_KEY=kv_your_token as an environment variable
    • Webhooks: Call POST /api/v2/webhooks with your URL and events
  3. Test it: try GET /api/v2/credits to check your balance, or ask Claude “check my Kolvera credits.”

Real-World Use Cases

Build a target list and start outreach in one conversation
Method: MCP Server (Claude Desktop or Claude Code)
You say: “Research Australian fintech companies in Melbourne with 20-50 employees. Create an ICP profile called Q3 Fintech, add the top companies to a hot list, find emails for all contacts, then enrol anyone with a verified email in my Q3 Campaign.”

What happens behind the scenes:
  1. Claude calls trigger_deep_research with your brief (3cr)
  2. Polls get_research_report until research completes
  3. Creates ICP via create_icp_profile
  4. Creates hot list via create_hot_list and adds companies via add_to_hot_list
  5. Calls find_contact_email on each contact (2cr per email found)
  6. Enrols verified contacts via enrol_contacts_in_campaign
Result: A targeted campaign running against researched, enriched contacts — from one prompt.
Daily morning briefing via Claude
Method: MCP Server
You say: “Give me a morning rundown — how are my campaigns performing, do I have any meetings today, and what’s my credit balance?”

Claude calls list_campaigns (shows open/reply rates), list_meetings with upcoming_only, and get_credit_balance. Returns a summary like:

“Your Q2 .NET Campaign has a 42% open rate and 8% reply rate across 120 sends. You have 3 meetings today — 9am with Sarah Chen, 11am with Mike Roberts, 2pm with Acme Corp. Credit balance: 847 plan + 150 addon = 997 total.”
Ping Slack when a prospect replies
Method: Webhooks
Setup: Create a webhook for campaign.replied pointing at a Slack incoming webhook URL (or Zapier/Make trigger). Every time a prospect replies, Kolvera instantly sends their name, email, and campaign to your channel.
curl -X POST https://www.kolvera.io/api/v2/webhooks \
  -H "Authorization: Bearer kv_your_token" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://hooks.slack.com/your-hook",
       "events": ["campaign.replied", "campaign.bounced"],
       "secret": "my_signing_key"}'
Cost: Free. Webhooks never consume credits.
Get alerted when credits run low
Method: Webhooks
How: Subscribe to credit.low. When your balance drops below 10, Kolvera sends a webhook to your Slack channel or email so you can top up before your next enrichment run. Useful when you have scheduled scripts doing batch find-email or find-phone.
Weekly export of enriched contacts
Method: CLI + cron job
How: Schedule a script that pulls contacts with verified emails and writes them to a CSV or pushes to your CRM:
# Every Monday at 8am
0 8 * * 1 python kolvera_cli.py contacts search --has-email yes --per-page 500 | jq '.contacts' > weekly_contacts.json
Cost: Free. Reading data never uses credits.
Sync new contacts to Google Sheets via Zapier
Method: Webhooks
How: Subscribe to contact.created and contact.enriched, point them at a Zapier webhook trigger, then map fields to your Google Sheet columns. Every new contact or enrichment automatically appears in your spreadsheet.
Batch enrich contacts from a script
Method: REST API (Python example)
import requests, time

API = "https://www.kolvera.io/api/v2"
HEADERS = {"Authorization": "Bearer kv_your_token"}

# Get contacts missing emails
r = requests.get(f"{API}/contacts", headers=HEADERS,
                 params={"has_email": "no", "per_page": 50})
contacts = r.json()["contacts"]

for c in contacts:
    result = requests.post(
        f"{API}/contacts/{c['id']}/find-email",
        headers=HEADERS
    ).json()
    if result.get("email"):
        print(f"Found: {c['first_name']} {c['last_name']} → {result['email']}")
    time.sleep(2)  # respect rate limits
Cost: 2cr per email found. Contacts where no email is found are free.
Ask Claude to manage your pipeline
Method: MCP Server
You say: “Show me all Python developer jobs in NSW, then find the companies posting them and check if we have contacts there.”

Claude calls search_pipeline_jobs with query “python” and state filter NSW, then for each unique company calls search_companies to find matches and get_company_contacts to show who you already know. Gives you a prioritised list of warm leads vs cold outreach targets.
MCP Server — Setup & Tools

MCP (Model Context Protocol) lets AI assistants use Kolvera as a tool. You talk in plain English, the AI calls Kolvera behind the scenes.

Setup Guide (5 steps)

Step 1: Generate your config

Go to Integrations and click Generate Config on the AI Assistant (MCP) card.

Integrations page - Generate Config button

Step 2: Copy the config

Click Copy to copy the JSON config to your clipboard.

Generated MCP config with Copy button

Step 3: Open Claude Desktop settings

In Claude Desktop, go to Settings → Developer → Edit Config.

Claude Desktop Settings - Developer - Edit Config

Step 4: Find the config file

Edit Config opens your file explorer. Open claude_desktop_config.json in any text editor.

File explorer showing claude_desktop_config.json

Step 5: Paste and save

If the file is empty or only has {}, paste the entire config you copied.
If it already has content (like a "preferences" section), paste the "kolvera": { ... } block inside the existing "mcpServers" object. If there’s no "mcpServers" key, add one at the top level.
Save the file and restart Claude Desktop. You should see "kolvera" with a green running badge in Settings → Developer.

Config file with Kolvera MCP JSON pasted

Requires Node.js — the config uses npx mcp-remote to connect. If you don’t have Node.js, install it here (LTS version recommended).

98 Tools Available

You don’t need to memorise these — just describe what you want and the AI picks the right tool.

Contacts (11 tools)

search_contacts — search by name, title, email, company. Filter by has_email, has_phone, is_prospect
get_contact — full detail with company, email status, phone, LinkedIn, notes
create_contact — add a contact, optionally link to company and mark as prospect
update_contact — edit name, title, email, phone, location, notes, target role
delete_contact — permanently remove a contact and all linked records
find_contact_email — multi-source email enrichment (2cr on success)
find_contact_phone — phone enrichment: cached → native → directory (2-6cr on success)
verify_contact_email — verify an existing email address (free)
bulk_find_emails — find emails for multiple contacts at once (2cr each on success)
bulk_find_phones — find phones for multiple contacts at once (2-6cr each on success)
list_profile_suggestions — AI-suggested profile updates from meeting transcripts

Credits (3 tools)

get_credit_balance — plan balance + addon balance + total
get_bulk_enrichment_status — check progress of running bulk enrichment operations
get_credit_history — paginated transaction log with action filter

Companies (7 tools)

search_companies — search by name, domain, industry, state, BD status, location
get_company — full detail with contact count, domain, ABN, phone
create_company — add a company with name, domain, industry, location
get_company_contacts — paginated list of contacts at a company
update_company — edit industry, phone, location, BD status, notes, do-not-contact flag
research_company — AI research on a company: hiring signals, growth, industry context (1cr)
find_company_contacts — find contacts at a company via enrichment providers (2cr on success)

Campaigns (18 tools)

list_campaigns — all campaigns with enrolled/sent/opened/replied stats
get_campaign — campaign detail with email steps, variants, and performance
get_campaign_stats — open rate, reply rate, bounce rate for a campaign
create_campaign — create a draft campaign, optionally link an ICP for AI context
update_campaign — edit name, settings, timezone, daily limits
delete_campaign — permanently remove a draft campaign
create_campaign_step — add an email step to a campaign with subject, body, delay
update_campaign_step — edit subject, body, delay for a specific step
delete_campaign_step — remove a step from the sequence
generate_campaign_steps — AI-generate a multi-step email sequence using your ICP and business context (free)
get_campaign_generation_status — poll async step generation progress
enrol_contacts_in_campaign — add contacts by ID, with dedup and blocklist checks
get_campaign_enrollments — list enrolled contacts with status and next send time
unenrol_from_campaign — remove contacts from a campaign
activate_campaign — start sending (requires confirm=true, preview returned by default)
pause_campaign — stop sending (only works on active campaigns)
resume_campaign — restart sending (only works on paused campaigns)
duplicate_campaign — clone a campaign with all email steps (no enrollments copied)

Pipeline (2 tools)

search_pipeline_jobs — search scraped jobs by title, company, state, sector, source
get_pipeline_job — full job detail with salary, location, posting date

Deep Research (4 tools)

trigger_deep_research — discover companies matching a brief (3cr). Link an ICP for tighter results. Runs async — poll with get_research_report
expand_deep_research — find MORE companies from the same brief, excluding duplicates (2cr). Appends to the same report
get_research_report — results with discovered companies, market insights, and sources
list_research_reports — all past research reports

Hot Lists (7 tools)

list_hot_lists — all curated lists with member counts
get_hot_list — list members with contact details, paginated
create_hot_list — create a new curated list
add_to_hot_list — add contacts, prospects, or candidates by ID
remove_from_hot_list — remove members from a hot list
delete_hot_list — permanently delete a hot list
update_hot_list — edit hot list name and description

Ideal Client Profiles (12 tools)

list_icp_profiles — all ICP profiles with prospect counts
get_icp_profile — profile detail with company map and criteria
list_icp_prospects — prospects linked to an ICP, with email status filter
create_icp_profile — define target industries, locations, company sizes, titles manually
update_icp_profile — edit title, industries, locations, sizes, titles, keywords
generate_icp_profile — AI-generate a full profile from a brief description: pain points, value prop, differentiators, objection handling, SEEK keywords (2cr)
archive_icp_profile — soft delete (prospects preserved, ICP hidden)
delete_icp_profile — permanent delete (prospects unlinked, company map deleted)
link_prospect_to_icp — link a prospect to an ICP
unlink_prospect_from_icp — remove a prospect’s ICP link
link_company_to_icp — add a company to an ICP’s company map with tier
unlink_company_from_icp — remove a company from an ICP’s company map

MPC Profiles (6 tools)

list_mpc_profiles — all MPC Profiles with company/candidate counts
get_mpc_profile — profile detail with must-haves, move triggers, disqualifiers
create_mpc_profile — define a target role manually
update_mpc_profile — edit all fields: title, sectors, employers, locations, must-haves, disqualifiers, LinkedIn keyword, tone, ICP link
delete_mpc_profile — permanent delete
generate_mpc_profile — AI-generate from a role title and context: title variants, move triggers, objections, LinkedIn boolean (1cr)

Business Contexts (5 tools)

list_business_contexts — all business contexts with primary flag
create_business_context — add a new business context (name, what you sell, buyers)
update_business_context — edit context fields
delete_business_context — remove a business context
set_primary_business_context — set which context is used by default for AI

Job Scraping (10 tools)

run_job_scrape — scrape SEEK, Indeed, LinkedIn, or Reed for live job listings. Optionally link an ICP for auto-config
run_saved_config — re-run an existing saved search config
get_scrape_progress — poll scrape status (percent, phase, new/skipped counts)
list_scrape_configs — all saved search configs
get_scrape_config — detail of a saved config with keywords, locations, excludes
update_scrape_config — edit keywords, locations, exclude terms, SEEK classification
archive_scrape_config — soft-archive a search config
delete_scrape_config — permanently delete a config (requires confirm=true)
analyze_scrape_quality — quality analysis of scraped job results
update_search_config_excludes — update exclude keywords and companies on a search config

Ideal Candidates (6 tools)

list_ideal_candidates — all ideal candidate profiles
get_ideal_candidate — profile detail with must-haves, sectors, employers
create_ideal_candidate — define a target candidate profile manually
update_ideal_candidate — edit all fields
delete_ideal_candidate — permanent delete
generate_ideal_candidate — AI-generate from role title and context (1cr)

Meetings & Fathom (7 tools)

list_meetings — upcoming or all meetings, with contact info
get_meeting — meeting detail with Google Meet link, contact, notes
create_meeting — schedule a meeting with title, time, contact, location
sync_fathom_meetings — sync meeting recordings from Fathom
list_fathom_notes — meeting summaries from Fathom, optionally filtered by contact
update_meeting — edit meeting title, time, notes, or status
delete_meeting — permanently delete a meeting

Example Conversations

You: How are my campaigns doing?
Claude: You have 3 active campaigns. “Q2 .NET Sydney” leads with 42% open rate and 12% reply rate across 85 sends. “AU Fintech BD” has 38% open and 6% reply across 120 sends. “NZ DevOps” just started — 15 sends, 2 opens so far.
You: Find emails for everyone in my “VIC Targets” hot list who doesn’t have one yet
Claude: Found 23 contacts in VIC Targets without emails. Running enrichment now... Found 18 emails (36cr). 5 couldn’t be found. Want me to enrol the 18 with verified emails in a campaign?
You: Schedule a meeting with the Acme Corp contact for Thursday 2pm
Claude: Created meeting “Acme Corp - Introduction” for Thursday 15 May at 2:00 PM AEST with Sarah Chen (sarah.chen@acmecorp.com.au). Duration: 30 minutes.
REST API v2 — 44 Endpoints

Base URL: https://www.kolvera.io/api/v2
Auth: Authorization: Bearer kv_your_token (or OAuth access token)

Contacts (7)

GET/contactsSearch (?q=, &has_email=, &has_phone=, &is_prospect=, &sort=, &page=)
GET/contacts/:idContact detail with company info
POST/contactsCreate contact (auto-links or creates company)
PATCH/contacts/:idUpdate fields
DELETE/contacts/:idDelete contact
POST/contacts/:id/find-emailFind email (2cr on success)
POST/contacts/:id/find-phoneFind phone (2-6cr on success)

Companies (6)

GET/companiesSearch (?q=, &industry=, &state=, &bd_status=)
GET/companies/:idCompany detail + contact count
GET/companies/:id/contactsContacts at company (paginated)
PATCH/companies/:idUpdate fields
POST/companies/:id/researchRun AI research on company (1cr)
POST/companies/:id/find-contactsFind contacts at company (2cr per contact found)

Campaigns (7)

GET/campaignsList with stats (?status=active)
GET/campaigns/:idDetail + email steps + stats
GET/campaigns/:id/statsOpen / reply / bounce rates
POST/campaigns/:id/activateActivate a draft campaign
POST/campaigns/:id/pausePause sending
POST/campaigns/:id/resumeResume sending
POST/campaigns/:id/enrolEnrol contacts {contact_ids: [...]}

Hot Lists (5)

GET/hot-listsList all hot lists
GET/hot-lists/:idMembers with contact details (paginated)
POST/hot-listsCreate {name, description}
POST/hot-lists/:id/membersAdd members {source_ids: [...]}
DELETE/hot-lists/:id/members/:midRemove member

ICP Profiles (5)

GET/icpList all ICP profiles
GET/icp/:idProfile + company map + prospect count
POST/icpCreate {title, target_industries, target_locations, ...}
POST/icp/generateAI-generate ICP profile (2cr)
PATCH/icp/:idUpdate profile criteria

Meetings (4)

GET/meetingsList (?status=, &upcoming=true)
GET/meetings/:idMeeting detail + Google Meet link
POST/meetingsCreate {title, starts_at_utc, duration_minutes, ...}
PATCH/meetings/:id/statusUpdate status (booked / attended / no_show / cancelled)

Pipeline & Research (5)

GET/pipelineSearch jobs (?q=, &status=, &state=, &sector=)
GET/pipeline/:idJob detail
GET/researchList research reports
GET/research/:idReport + discovered companies
POST/researchTrigger Deep Research {brief: "..."} (3cr)

Credits & Webhooks (5)

GET/creditsPlan + addon balance
GET/webhooksList webhook subscriptions
POST/webhooksCreate {url, events, secret}
PATCH/webhooks/:idUpdate subscription
DELETE/webhooks/:idRemove subscription

Quick Test

curl -H "Authorization: Bearer kv_your_token" \
  "https://www.kolvera.io/api/v2/credits"

# Response:
# {"ok": true, "plan_balance": 847, "addon_balance": 150, "total": 997}
Webhooks — 14 Real-Time Events

Instead of polling the API to check “did anyone reply?”, Kolvera sends a POST request to your URL the moment it happens. Connect to Slack, Zapier, Make, or your own server.

Setup in 3 Steps

  1. Pick a URL that can receive POST requests (Slack hook, Zapier trigger, your server, etc.)
  2. Register:
    curl -X POST https://www.kolvera.io/api/v2/webhooks \
      -H "Authorization: Bearer kv_your_token" \
      -H "Content-Type: application/json" \
      -d '{"url": "https://hooks.zapier.com/your-hook",
           "events": ["campaign.replied", "contact.enriched"],
           "secret": "optional_signing_key"}'
  3. Kolvera sends a JSON POST to your URL when the event fires

All 14 Events

Event When It Fires Data Included
contact.createdNew contact addedFull contact object
contact.updatedContact fields changedContact ID + changed fields
contact.enrichedEmail or phone found via enrichmentContact ID, type, found data
company.createdNew company createdCompany ID + name
company.updatedCompany fields changedCompany ID + changed fields
campaign.activatedCampaign started or resumedCampaign ID + name
campaign.pausedCampaign pausedCampaign ID + name
campaign.completedContact finishes all email stepsCampaign ID, contact ID, enrollment ID
campaign.repliedProspect replies to outreachCampaign ID, contact details
campaign.bouncedHard bounce detectedCampaign ID, email, error
meeting.createdMeeting scheduledFull meeting object
meeting.status_changedStatus updated (attended, no-show)Meeting ID, new status
research.completedDeep Research finishesReport ID, brief, companies found
credit.lowBalance drops to 10 or belowCurrent balance, action, amount

Verifying Signatures

If you set a secret, every webhook includes an X-Kolvera-Signature header (HMAC-SHA256 of the body). Verify it to confirm the request came from Kolvera:

import hmac, hashlib

def verify_signature(body: bytes, signature: str, secret: str) -> bool:
    expected = hmac.new(secret.encode(), body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected, signature)

Subscriptions auto-disable after 10 consecutive delivery failures.

CLI Tool — 20 Commands

Outputs JSON. Pipe to jq for formatting, save to files, or chain in shell scripts.

Setup

# Linux / Mac
export KOLVERA_API_KEY=kv_your_token

# Windows PowerShell
$env:KOLVERA_API_KEY = "kv_your_token"

Contacts

# Search contacts with filters
python kolvera_cli.py contacts search "developer" --has-email yes --sort updated_at

# Get full contact detail
python kolvera_cli.py contacts get <contact_id>

# Create a contact (auto-links company)
python kolvera_cli.py contacts create --first-name "Sarah" --last-name "Chen" \
  --email "sarah@acme.com" --company "Acme Corp" --prospect

# Find email for a contact (2cr if found)
python kolvera_cli.py contacts find-email <contact_id>

# Find phone (2-6cr if found)
python kolvera_cli.py contacts find-phone <contact_id>

Companies

# Search by industry and state
python kolvera_cli.py companies search "recruitment" --state VIC --industry "Staffing"

# View company detail
python kolvera_cli.py companies get <company_id>

# List contacts at a company
python kolvera_cli.py companies contacts <company_id>

Campaigns

# List campaigns (optionally filter by status)
python kolvera_cli.py campaigns list --status active

# View campaign detail with steps
python kolvera_cli.py campaigns get <campaign_id>

# Check performance stats
python kolvera_cli.py campaigns stats <campaign_id>

# Pause / resume
python kolvera_cli.py campaigns pause <campaign_id>
python kolvera_cli.py campaigns resume <campaign_id>

# Enrol contacts into a campaign
python kolvera_cli.py campaigns enrol <campaign_id> --contact-ids id1 id2 id3

Pipeline, Research & Credits

# Search pipeline jobs
python kolvera_cli.py pipeline search "python" --state-filter NSW

# View job detail
python kolvera_cli.py pipeline get <job_id>

# Trigger Deep Research (3cr)
python kolvera_cli.py research trigger "AU fintech companies in Melbourne"

# View research results
python kolvera_cli.py research get <report_id>

# List all research reports
python kolvera_cli.py research list

# Check credit balance
python kolvera_cli.py credits

Practical: Batch Enrich and Enrol

# Find contacts without emails, enrich them, enrol verified ones
CONTACTS=$(python kolvera_cli.py contacts search --has-email no --per-page 100)

# Get IDs
echo "$CONTACTS" | jq -r '.contacts[].id' | while read ID; do
  python kolvera_cli.py contacts find-email "$ID"
  sleep 2
done

# Check balance after enrichment
python kolvera_cli.py credits
OAuth 2.0 — For App Developers

Building an app that connects to Kolvera on behalf of other users? Use OAuth instead of API tokens. Each user gets their own authorised connection with specific permissions.

How It Works

  1. Your app redirects the user to Kolvera’s consent screen
  2. They see what permissions your app is requesting and click “Authorise”
  3. Kolvera redirects back with a temporary code
  4. Exchange the code for an access token (1hr) and refresh token (30 days)
  5. Use the access token on /api/v2/* endpoints like any Bearer token

Endpoints

AuthoriseGET /oauth/authorize
TokenPOST /oauth/token
UserInfoGET /oauth/userinfo
RevokePOST /oauth/revoke
DiscoveryGET /oauth/.well-known/openid-configuration

17 Permission Scopes

contacts:read — view contacts
contacts:write — create/edit contacts
contacts:enrich — find emails/phones
campaigns:read — view campaigns
campaigns:write — manage campaigns
pipeline:read — view jobs
research:read — view reports
research:write — run research
hot_lists:read — view lists
hot_lists:write — manage lists
icp:read — view ICP profiles
icp:write — manage ICP profiles
meetings:read — view meetings
meetings:write — create meetings
webhooks:manage — manage webhooks
credits:read — view balance
profile:read — view user info

PKCE (S256) supported for public clients. Access tokens expire after 1 hour.

Rate Limits & Credits

Action Rate Limit Credit Cost
Search / list / view (any GET)60-120/minFree
Create / update / delete10-30/minFree
Find Email30/min2cr on success
Find Phone30/min2-6cr on success
Deep Research5/min3cr per run
Webhooks (receiving)UnlimitedFree

Credits are only charged when data is actually found. Failed lookups are free. Check your balance anytime: GET /api/v2/credits or ask Claude “check my Kolvera credits.”

Connecting...

Quick Dial

Loading...
0:00
Unknown
Listening...
0:00