API reference
Build Leadiy discovery, enrichment, scoring and outreach right into your own stack. A clean REST API with predictable resources, JSON everywhere, and secure API-key auth.
Leadiy API
A REST API to find businesses, enrich contacts, score opportunities and run outreach - programmatically.
The Leadiy API is organized around REST. It has predictable, resource-oriented URLs, accepts JSON-encoded request bodies, returns JSON-encoded responses, and uses standard HTTP verbs, status codes and authentication.
Every request is made to the base URL below. All requests must be made over HTTPS - calls made over plain HTTP will fail, and requests without authentication will also fail.
# Base URL for all API requests
https://api.leadiy.com/v1Authentication
Authenticate with a secret API key sent as a Bearer token.
The Leadiy API uses API keys to authenticate requests. You can create and manage your keys from your dashboard under Settings → API keys. Keep your secret keys safe: they carry the ability to spend points and act on your account.
Provide your key in the Authorization header as a Bearer token on every request. Never expose a secret key in client-side code, a public repository, or anywhere a user could read it.
curl https://api.leadiy.com/v1/account \
-H "Authorization: Bearer $LEADIY_API_KEY"Making requests
Send JSON, get JSON. Standard verbs, standard status codes.
For POST and PATCH requests, send a JSON body and set the Content-Type header to application/json. GET requests take parameters in the query string. Successful responses return a 2xx status code and a JSON body.
Most write operations spend points - the response includes a points_spent field and an X-Points-Remaining header so you can track usage in real time.
curl https://api.leadiy.com/v1/businesses/enrich \
-X POST \
-H "Authorization: Bearer $LEADIY_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "business_ids": ["biz_8Kd21"] }'Errors
Conventional HTTP status codes plus a structured error object.
Leadiy uses standard HTTP status codes: 2xx for success, 4xx for a problem with the request (a missing parameter, a failed validation, insufficient points), and 5xx for a rare error on our end.
Every error response includes a JSON body with a machine-readable code, a human-readable message, and - for validation errors - the offending fields.
| Code | Meaning |
|---|---|
| 200 / 201 | Success - the request worked. |
| 400 | Bad request - often a missing or invalid parameter. |
| 401 | Unauthorized - no valid API key provided. |
| 402 | Insufficient points to complete the request. |
| 404 | The requested resource doesn't exist. |
| 429 | Too many requests - you hit a rate limit. |
| 500 | Something went wrong on our end. |
{
"error": {
"type": "invalid_request_error",
"code": "missing_parameter",
"message": "The \"location\" parameter is required.",
"param": "location"
}
}Rate limits & points
Two limits to know: request rate, and your monthly points balance.
Requests are rate-limited per API key. If you exceed the limit you'll receive a 429 response - back off and retry with exponential backoff. Every response includes X-RateLimit-Remaining and X-RateLimit-Reset headers.
Separately, data and AI operations spend points from your plan's monthly balance (from 50 on Free up to 30,000 on Enterprise). Read-only calls like listing resources are free; searches, enrichment, scoring, analyses and AI generation spend points, always reported back in the response.
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 96
X-RateLimit-Reset: 1735689600
X-Points-Remaining: 1984Pagination
List endpoints are cursor-paginated.
All top-level list endpoints accept a limit (default 20, max 100) and a starting_after cursor. The response includes has_more and, when true, the id to pass as the next starting_after.
Iterate by passing the last object's id as starting_after until has_more is false.
curl "https://api.leadiy.com/v1/lead-lists?limit=20&starting_after=list_9Fa02" \
-H "Authorization: Bearer $LEADIY_API_KEY"Businesses
Search real businesses by category and location, and retrieve a single business by id.
Search businesses
/businesses/searchReturns businesses matching a category and location. The number of results is capped by your plan (5 on Free up to 500 on Enterprise). Spends points.
Parameters
categorystringrequiredBusiness category, e.g. "restaurants", "dentists".
locationstringrequiredCity, region or area to search within.
limitintegeroptionalMax results to return (bounded by your plan).
curl "https://api.leadiy.com/v1/businesses/search?category=restaurants&location=Los%20Angeles&limit=25" \
-H "Authorization: Bearer $LEADIY_API_KEY"{
"object": "list",
"points_spent": 8,
"data": [
{
"id": "biz_8Kd21",
"name": "Bella Napoli Pizzeria",
"category": "Italian Restaurant",
"rating": 4.7,
"address": "1421 Sunset Blvd, Los Angeles, CA",
"website": "bellanapoli.com",
"phone": "+1 213-555-0142"
}
],
"has_more": true
}Retrieve a business
/businesses/{id}Fetches a single business, including any enriched fields you've added.
Parameters
idstringrequiredThe business id.
curl https://api.leadiy.com/v1/businesses/biz_8Kd21 \
-H "Authorization: Bearer $LEADIY_API_KEY"{
"id": "biz_8Kd21",
"name": "Bella Napoli Pizzeria",
"category": "Italian Restaurant",
"rating": 4.7,
"website": "bellanapoli.com",
"email": "hello@bellanapoli.com",
"enriched": true
}Enrichment
Append verified emails and richer company detail to businesses you've found.
Enrich businesses
/businesses/enrichFinds and verifies contact emails and fills in extra detail for the given businesses using AI extraction. Spends points per business.
Parameters
business_idsstring[]requiredIds of businesses to enrich.
curl https://api.leadiy.com/v1/businesses/enrich \
-X POST \
-H "Authorization: Bearer $LEADIY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"business_ids":["biz_8Kd21","biz_3Lp77"]}'{
"object": "list",
"points_spent": 6,
"data": [
{
"id": "biz_8Kd21",
"email": "hello@bellanapoli.com",
"email_status": "verified",
"employees": 24,
"socials": {
"instagram": "@bellanapoli"
},
"enriched": true
}
]
}Opportunities
Score and rank businesses by how strong an opportunity they are for your offer.
Find opportunities
/opportunities/findRuns the AI Opportunity Score across the given businesses for your offer, returning a 0–100 score, a summary and specific opportunities for each. Spends points per business.
Parameters
business_idsstring[]requiredBusinesses to score.
instructionstringrequiredWhat you offer and who benefits most.
anglestringoptionalOpportunity angle to sharpen scoring, e.g. "Poor SEO".
curl https://api.leadiy.com/v1/opportunities/find \
-X POST \
-H "Authorization: Bearer $LEADIY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"business_ids":["biz_8Kd21"],"instruction":"restaurants that could grow with better social media and local marketing","angle":"No social media"}'{
"object": "list",
"points_spent": 10,
"data": [
{
"id": "biz_8Kd21",
"score": 94,
"summary": "Strong ratings but almost no social presence - quick wins available.",
"opportunities": [
{
"title": "Local social campaigns",
"level": "HIGH"
}
]
}
]
}Sales Intelligence
Read buying intent and growth signals, estimate deal value and get the best contact.
Analyze accounts
/sales-intel/analyzeEvaluates each account's lead quality, buying intent, growth signals and estimated deal value, and recommends the best contact and channel. Spends points per account.
Parameters
business_idsstring[]requiredAccounts to analyze.
curl https://api.leadiy.com/v1/sales-intel/analyze \
-X POST \
-H "Authorization: Bearer $LEADIY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"business_ids":["biz_8Kd21"]}'{
"object": "list",
"points_spent": 12,
"data": [
{
"id": "biz_8Kd21",
"lead_quality": 87,
"intent": "high",
"signals": [
"hiring",
"ad_spend_up"
],
"deal_value": "$8k–12k/yr",
"best_contact": {
"role": "Owner",
"channel": "email"
}
}
]
}Market
Size a market by category and location - size, saturation and top segments.
Analyze a market
/market/analyzeAnalyzes the businesses that make up a market and returns its size, saturation and segment breakdown. Spends points based on scan depth.
Parameters
categorystringrequiredMarket category.
locationstringrequiredMarket location.
curl https://api.leadiy.com/v1/market/analyze \
-X POST \
-H "Authorization: Bearer $LEADIY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"category":"coffee shops","location":"Los Angeles"}'{
"id": "mkt_2Qa19",
"size": 3240,
"saturation": "medium",
"growth_yoy": 0.12,
"segments": [
{
"name": "Specialty cafes",
"count": 1180
}
],
"points_spent": 20
}Competitors
Benchmark businesses side by side to find the gaps.
Compare competitors
/competitors/analyzeEvaluates each business across presence, reputation and more, and ranks them for comparison. Spends points.
Parameters
business_idsstring[]requiredBusinesses to benchmark.
curl https://api.leadiy.com/v1/competitors/analyze \
-X POST \
-H "Authorization: Bearer $LEADIY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"business_ids":["biz_8Kd21","biz_3Lp77","biz_5Rt44"]}'{
"object": "list",
"points_spent": 14,
"data": [
{
"id": "biz_8Kd21",
"rank": 1,
"score": 88,
"leader": true,
"gaps": [
"no retargeting"
]
}
]
}Lead Lists
Create and manage named lists of businesses.
List lead lists
/lead-listsReturns your lead lists, most recent first. Cursor-paginated. Free.
Parameters
limitintegeroptionalMax lists to return (max 100).
curl "https://api.leadiy.com/v1/lead-lists?limit=20" \
-H "Authorization: Bearer $LEADIY_API_KEY"{
"object": "list",
"data": [
{
"id": "list_9Fa02",
"name": "Downtown restaurants · Q3",
"count": 18,
"tags": [
"hot",
"food"
]
}
],
"has_more": false
}Create a lead list
/lead-listsCreates an empty lead list you can add businesses to. Free.
Parameters
namestringrequiredList name.
descriptionstringoptionalOptional description.
tagsstring[]optionalOptional tags.
curl https://api.leadiy.com/v1/lead-lists \
-X POST \
-H "Authorization: Bearer $LEADIY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Downtown restaurants · Q3","description":"Dine-in prospects","tags":["hot","food"]}'{
"id": "list_9Fa02",
"name": "Downtown restaurants · Q3",
"count": 0
}Add businesses to a list
/lead-lists/{id}/businessesAdds one or more businesses to a lead list. Free.
Parameters
idstringrequiredThe lead list id.
business_idsstring[]requiredBusinesses to add.
curl https://api.leadiy.com/v1/lead-lists/biz_8Kd21/businesses \
-X POST \
-H "Authorization: Bearer $LEADIY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"business_ids":["biz_8Kd21","biz_3Lp77"]}'{
"id": "list_9Fa02",
"count": 2,
"added": 2
}Contacts
Your built-in CRM - contacts, activities and tasks.
Create a contact
/contactsCreates a contact, optionally from an existing business. Free.
Parameters
business_idstringoptionalLink the contact to a business.
statusstringoptionalnew · contacted · proposal · won · lost.
curl https://api.leadiy.com/v1/contacts \
-X POST \
-H "Authorization: Bearer $LEADIY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"business_id":"biz_8Kd21","status":"new"}'{
"id": "con_7Zx90",
"business_id": "biz_8Kd21",
"status": "new"
}Log an activity
/contacts/{id}/activitiesAdds an activity (call, email, note) to a contact's timeline. Free.
Parameters
idstringrequiredThe contact id.
typestringrequiredcall · email · note.
bodystringrequiredActivity content.
curl https://api.leadiy.com/v1/contacts/biz_8Kd21/activities \
-X POST \
-H "Authorization: Bearer $LEADIY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"type":"note","body":"Spoke with the owner - send Q3 proposal Friday."}'{
"id": "act_1Bc23",
"contact_id": "con_7Zx90",
"type": "note"
}Outreach
Generate personalized outreach for a business with AI.
Generate a message
/outreach/generateDrafts a personalized message for a business on the chosen channel, tone and language. Spends points per generation.
Parameters
business_idstringrequiredThe prospect to write to.
channelstringrequiredcold_email · follow_up · linkedin · whatsapp · sms · call_script.
tonestringoptionalprofessional · friendly · persuasive …
languagestringoptionalOne of 20+ supported languages.
instructionstringoptionalExtra guidance for the draft.
curl https://api.leadiy.com/v1/outreach/generate \
-X POST \
-H "Authorization: Bearer $LEADIY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"business_id":"biz_8Kd21","channel":"cold_email","tone":"friendly","language":"English","instruction":"offer a free social audit, keep it warm"}'{
"id": "out_4Dd56",
"channel": "cold_email",
"subject": "A quick idea for Bella Napoli",
"body": "Hi Bella Napoli - loved your 4.7★ reviews…",
"points_spent": 3
}Templates
Reusable email templates with merge fields.
List templates
/templatesReturns your saved email templates. Free.
curl https://api.leadiy.com/v1/templates \
-H "Authorization: Bearer $LEADIY_API_KEY"{
"object": "list",
"data": [
{
"id": "tpl_6Ee78",
"name": "Intro - restaurants",
"subject": "A quick idea for {{business.name}}"
}
],
"has_more": false
}Create a template
/templatesCreates a reusable template with merge fields like {{business.name}}. Free.
Parameters
namestringrequiredTemplate name.
subjectstringrequiredSubject line (supports merge fields).
bodystringrequiredHTML or text body (supports merge fields).
curl https://api.leadiy.com/v1/templates \
-X POST \
-H "Authorization: Bearer $LEADIY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Intro - restaurants","subject":"A quick idea for {{business.name}}","body":"Hi {{business.name}}, I came across your work…"}'{
"id": "tpl_6Ee78",
"name": "Intro - restaurants"
}Campaigns
Create, send and track outreach campaigns from your connected email.
Create a campaign
/campaignsCreates a campaign from a lead list and a template. Requires a connected SMTP sender. Free to create; sending spends points.
Parameters
namestringrequiredCampaign name.
lead_list_idstringrequiredRecipients source list.
template_idstringrequiredTemplate to send.
schedulestringoptionalISO 8601 time to send; omit to send now.
curl https://api.leadiy.com/v1/campaigns \
-X POST \
-H "Authorization: Bearer $LEADIY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"LA cafes - March","lead_list_id":"list_9Fa02","template_id":"tpl_6Ee78","schedule":"2026-03-14T09:00:00Z"}'{
"id": "cmp_2Ff90",
"status": "scheduled",
"recipients": 48
}Send a campaign
/campaigns/{id}/sendSends (or launches the scheduled send of) a campaign. Spends points per recipient.
Parameters
idstringrequiredThe campaign id.
curl https://api.leadiy.com/v1/campaigns/biz_8Kd21/send \
-X POST \
-H "Authorization: Bearer $LEADIY_API_KEY"{
"id": "cmp_2Ff90",
"status": "sending",
"recipients": 48,
"points_spent": 48
}Retrieve a campaign
/campaigns/{id}Returns a campaign with live stats - sent, opened, clicked and replied. Free.
Parameters
idstringrequiredThe campaign id.
curl https://api.leadiy.com/v1/campaigns/biz_8Kd21 \
-H "Authorization: Bearer $LEADIY_API_KEY"{
"id": "cmp_2Ff90",
"status": "sent",
"stats": {
"sent": 48,
"opened": 31,
"clicked": 12,
"replied": 9
}
}Reports
Generate branded, shareable reports from your research.
Generate a report
/reports/generateBuilds a polished report (market, competitor, website audit or opportunity summary). Spends points based on depth. Returns a URL to the finished report.
Parameters
typestringrequiredmarket · competitor · website · opportunity.
market_idstringoptionalSource object id for the report.
brandingbooleanoptionalInclude your logo and branding.
curl https://api.leadiy.com/v1/reports/generate \
-X POST \
-H "Authorization: Bearer $LEADIY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"type":"market","market_id":"mkt_2Qa19","branding":true}'{
"id": "rpt_3Gg12",
"type": "market",
"status": "ready",
"url": "https://api.leadiy.com/v1/reports/rpt_3Gg12.pdf",
"points_spent": 15
}Account
Your plan, points balance and usage.
Retrieve account
/accountReturns your current plan, points balance and result limits. Free.
curl https://api.leadiy.com/v1/account \
-H "Authorization: Bearer $LEADIY_API_KEY"{
"id": "acct_0Aa11",
"plan": "growth",
"points_remaining": 1984,
"points_included": 2000,
"max_results": 50,
"renews_at": "2026-04-01T00:00:00Z"
}Webhooks
Subscribe to events so your systems react in real time.
Create a webhook endpoint
/webhooksRegisters a URL to receive event notifications. We POST a signed JSON payload to your URL when subscribed events occur.
Parameters
urlstringrequiredHTTPS URL to receive events.
eventsstring[]requiredEvent types to subscribe to.
curl https://api.leadiy.com/v1/webhooks \
-X POST \
-H "Authorization: Bearer $LEADIY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/hooks/leadiy","events":["campaign.replied","enrichment.completed"]}'{
"id": "whk_5Hh34",
"url": "https://example.com/hooks/leadiy",
"secret": "whsec_••••",
"status": "active"
}Event types
Your endpoint receives a signed POST for each subscribed event. Verify the signature with the secret from your webhook endpoint before trusting a payload.
search.completedA business search finished.enrichment.completedAn enrichment job finished.opportunity.scoredOpportunity scoring completed for a batch.campaign.sentA campaign finished sending.campaign.openedA recipient opened a campaign email.campaign.repliedA recipient replied to a campaign.report.readyA generated report is ready to download.{
"id": "evt_9Kk56",
"type": "campaign.replied",
"created": 1735689600,
"data": {
"campaign_id": "cmp_2Ff90",
"contact_id": "con_7Zx90",
"snippet": "Sounds great - Thursday works."
}
}Ready to build?
Create a free account, generate your API keys from Settings → API keys, and make your first call in minutes.