API reference.
The LeadVector REST API lives at https://api.leadvector.app/v1. Every request carries your access key in the x-api-key header, and every response is JSON. Data, campaigns, leads, mailboxes, and the inbox are all here.
Authentication
Create your access key under Account, API key in the app, where you can also see its usage analytics. Each user has one key. The raw key is shown once, on creation; LeadVector stores only a hash of it. Send it as the x-api-key header on every request.
One key per user, with usage analytics
Sent as the x-api-key header
Calls are isolated per key
GET
/v1/auth/me
Validate an access key and return the account it belongs to.
GET /v1/auth/me
cURL
curl https://api.leadvector.app/v1/auth/me \ -H "x-api-key: $LEADVECTOR_API_KEY"
Response · 200 OK
{ "success": true, "message": "SUCCESS", "data": { "authenticated": true, "userId": 42 } }
Rate limits and credits
Data lookups (find-email, find-mobile, verify-email, and reverse-email-lookup) allow 5 requests per second per access key, with short bursts of up to 20. Campaign, lead, inbox, and mailbox endpoints allow 120 requests per minute per key. Across all of an account’s keys, the total is capped at 10 requests per second. Limits use a token bucket that refills continuously. Every response carries X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Window headers, and a 429 response includes Retry-After, so a client can back off before it is refused.
Data endpoints use the same credit pool as the app and your team. A credit is used only when a valid result comes back. Lookups run live across multiple providers, and results are saved to the contact, so repeating a lookup does not cost another credit.
Data
The four finder and verification calls behave exactly as they do in the app. Results are found in real time, verified, saved to the contact, and only charged when valid.
POST
/v1/find-email
Find a verified work email from a full name and a company domain.
Body: fullName, domain
POST
/v1/find-mobile
Find a mobile number from a LinkedIn profile URL.
Body: linkedinUrl
POST
/v1/verify-email
Verify an email address against DNS and the mail server.
Body: email
POST
/v1/reverse-email-lookup
Resolve an email address to the LinkedIn profile of the person behind it.
Body: email
POST /v1/find-email
cURL
curl -X POST https://api.leadvector.app/v1/find-email \ -H "x-api-key: $LEADVECTOR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "fullName": "Emily Turner", "domain": "lumenanalytics.com" }'
Response · 200 OK
{ "success": true, "message": "EMAIL_RESULT", "data": [{ "uuid": "3f6d2c1e-8b7a-4f0e-9c2d-1a5b7e9f4c21", "email": "emily@lumenanalytics.com", "firstName": "Emily", "lastName": "Turner", "domain": "lumenanalytics.com", "emailStatus": "valid" }] }
Campaigns
Create and manage campaigns and the sequence steps inside them. Campaigns are addressed by uuid.
GET
/v1/campaigns
List campaigns, newest first.
Query: page, limit, search, campaignStatus
POST
/v1/campaigns
Create a campaign.
Body: name
GET
/v1/campaigns/:uuid
Read one campaign with its settings and counts.
PATCH
/v1/campaigns/:uuid
Rename a campaign, or soft-delete it with status false.
Body: name, status
DELETE
/v1/campaigns/:uuid
Archive a campaign.
GET
/v1/campaigns/:uuid/sequences
List the sequence steps of a campaign.
POST
/v1/campaigns/:uuid/sequences
Add sequence steps, in order.
Body: steps[]
Leads
Leads belong to a campaign. Upsert one lead with its custom variables, or add many at once.
GET
/v1/leads/:uuid
List the leads of a campaign.
Query: page, limit, search
POST
/v1/leads/:uuid
Create or update one lead by email, with optional custom variables.
Body: email, firstName, lastName, companyName, pauseUntil, variables[]
POST
/v1/leads/:uuid/manual
Add a batch of leads, optionally skipping duplicates.
Body: leads[], skipDuplicates
POST /v1/leads/:uuid
cURL
curl -X POST https://api.leadvector.app/v1/leads/019e8eb2-a04a-76a8-8aed-37178d5786f5 \ -H "x-api-key: $LEADVECTOR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "email": "emily@lumenanalytics.com", "firstName": "Emily", "lastName": "Turner", "companyName": "Lumen Analytics", "variables": [{ "name": "jobTitle", "value": "Head of Sales" }] }'
Response · 200 OK
{ "success": true, "message": "SUCCESS", "data": { ...the lead as stored } }
Email accounts
The mailboxes you have connected, their warmup settings, and their health. Mailboxes are addressed by numeric id.
GET
/v1/email-accounts
List connected mailboxes with warmup status and health.
GET
/v1/email-accounts/:mailboxId
Read one mailbox with its counters and health score.
PATCH
/v1/email-accounts/:mailboxId/settings
Update warmup settings.
Body: displayName, dailyLimit, hourlyLimit, warmupDay, status
PATCH
/v1/email-accounts/:mailboxId/pause
Pause warmup for a mailbox.
PATCH
/v1/email-accounts/:mailboxId/resume
Resume warmup for a mailbox.
DELETE
/v1/email-accounts/:mailboxId/disconnect
Disconnect a mailbox and keep its record.
DELETE
/v1/email-accounts/:mailboxId
Delete a mailbox.
Inbox
Everything Unibox shows: conversations across every connected mailbox, matched to their campaign and lead.
GET
/v1/inbox
List conversations.
Query: tab, mailbox, mailboxId, status, search, read, archived, campaignUuid
GET
/v1/inbox/:id
Read one conversation with its messages.
PATCH
/v1/inbox/:id
Update lead status, tab, read or archived state, reminder, or schedule.
Body: status, tab, archived, read, reminderAt, scheduled
POST
/v1/inbox/mailbox-sync/:id
Synchronise a mailbox now.
POST
/v1/inbox/messages/:id/forward
Forward a message with an optional note.
Body: toEmails[], ccEmails[], bccEmails[], note
Responses and errors
Every response is a JSON object with success, message, and data. Standard HTTP status codes tell you what went wrong: 400 for an invalid request, 401 for a missing or invalid access key, 403 with INSUFFICIENT_CREDITS when the account has run out of credits, 404 when the record does not exist, 429 when a rate limit is hit, and 5xx for a server-side problem.
The CLI is a client of this API and exposes the same actions with structured output. If something in this reference does not match what you see, email support@leadvector.app and we will fix it.
