TL;DR: RESTful API at api.cleanlist.ai/api/v1 for programmatic B2B contact enrichment. Authenticate with an API key, enrich single contacts or bulk CSVs, and manage lead lists. Same waterfall enrichment as the portal.
API Reference
The Cleanlist.ai Public API lets you run asynchronous contact enrichment with API keys.
Base URL
https://api.cleanlist.ai/api/v1/publicAll endpoints use HTTPS. HTTP requests are rejected.
Quick Start
Get up and running in 3 steps:
1. Get Your API Key
Generate an API key from the Cleanlist.ai portal (opens in a new tab):
- Log in to app.cleanlist.ai
- Go to Settings -> API Keys
- Click Generate Key
- Copy your key (starts with
clapi_)
2. Validate Your Key
curl https://api.cleanlist.ai/api/v1/public/auth/validate-key \
-H "Authorization: Bearer clapi_your_api_key"3. Start Your First Bulk Enrichment
Bulk enrichment supports up to 250 contacts per request.
curl -X POST https://api.cleanlist.ai/api/v1/public/enrich/bulk \
-H "Authorization: Bearer clapi_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"enrichment_type": "partial",
"contacts": [
{
"linkedin_url": "https://www.linkedin.com/in/levon-adamyan/",
"first_name": "Levon",
"last_name": "Adamyan",
"company_domain": "cleanlist.ai"
}
]
}'Enrichment runs asynchronously. You get workflow_id and task_ids immediately, then poll status.
API Sections
| Section | Description |
|---|---|
| Authentication | API keys and request headers |
| Enrichment | Bulk enrichment, status polling, and webhook callbacks |
Key Concepts
Enrichment Types
| Type | Behavior |
|---|---|
none | Record preparation only (no new email/phone appended) |
partial | Email enrichment |
phone_only | Phone enrichment |
full | Email + phone enrichment |
Contact Input Requirement
For each contact in contacts, provide either:
linkedin_urlfirst_name+last_name+ (company_nameorcompany_domain)
Async Workflow
- Call
POST /enrich/bulk. - Store
workflow_idandtask_ids. - Poll
GET /enrich/statuswith eitherworkflow_idortask_id. - Optionally pass
webhook_urlin the bulk request to receive completion callbacks.
Credits
- Email enrichment: 1 credit per successful find
- Phone enrichment: 10 credits per successful find
- Failed enrichments: 0 credits charged
Rate Limits
- Public API limit:
60 requests per minuteper organization - Window type: fixed 60-second window
- Exceeded limit response:
429 Too Many Requests - Retry guidance: respect the
Retry-Afterresponse header
Response Format
All responses are JSON. Error responses follow this format:
{
"detail": "Error message describing what went wrong"
}Common status codes: 400 (bad request), 401 (unauthorized), 402 (insufficient credits), 404 (not found), 422 (validation error), 429 (rate limited), 500 (server error).