Explee Public API
Version: 1.0.0
> Tip: This documentation is designed for humans. To integrate with AI agents, provide them with the OpenAPI schema at https://api.explee.com/public/api/openapi.json instead.
Search millions of companies worldwide using natural language queries and structured filters!
Rate limit: 10000 requests per hour, 150 concurrent requests per organization. Timeout: 90s.
Authentication
ApiKeyAuth: apiKey - Get your API key at [API Keys](https://explee.com/api-keys)
Endpoints
POST /public/api/v1/search/companies
Companies
Search for companies using structured definitions.
## How It Works
Provide a structured definition of your target companies in the `definition` field — our AI will find matching companies.
All other filters are optional.
See the request schema below for the full list of available filters.
**Definition examples:**
- `"YouTube video summarization tool"`
- `"electronic signature platform"`
- `"AI B2B SaaS"`
- `"real estate company"`
## AI Enrichment
Use the `criteria` parameter to score companies against custom criteria.
Each company will be evaluated and scored (0-5) with reasoning for each criterion.
## Pricing
- **First 100 results are free** (including AI enrichment)
- **0.5 credits** per company after the first 100
- **+0.1 credits** per company per criterion after the first 100
Example: 150 companies with 2 criteria = 50 billable × (0.5 + 0.1 × 2) = 35 credits (first 100 are free)
Empty results = 0 credits.
Request Body
Request body required
Responses
200: Successful Response401: Invalid or missing API key. Include `X-API-Key` header.402: Insufficient credit balance. Top up your account.422: Validation error. Check request body and parameters.429: Rate limit exceeded (10000/hour) or concurrent limit reached (150 per organization).500: Internal server error. Contact support if persists.504: Request timeout. Please try again later.
POST /public/api/v1/search/companies-by-domains
Companies by Domains
Find companies by their domains.
**How it works:**
1. Provide a list of company domains (up to 1000)
2. The system looks up each domain and returns **at most one** company profile per domain (the best match by quality score)
**Pricing:**
- **0.5 credit(s)** per company found
- **0 credits** for domains not found
**Limits:**
- Maximum 1000 domains per request
- Maximum 10000 companies per response
Request Body
Request body required
Responses
200: Successful Response401: Invalid or missing API key. Include `X-API-Key` header.402: Insufficient credit balance. Top up your account.422: Validation error. Check request body and parameters.429: Rate limit exceeded (10000/hour) or concurrent limit reached (150 per organization).500: Internal server error. Contact support if persists.504: Request timeout. Please try again later.
POST /public/api/v1/search/people
People
Search for people (employees) at companies matching your criteria.
## How It Works
Provide `job_titles` in `people_filters` to find people by their role.
Use `company_filters.definition` to narrow down which companies to search.
Use `company_linkedin_ids` to restrict results to a specific list of company LinkedIn IDs.
**Job title examples:**
- `["Head of Sales", "VP Sales"]`
- `["CTO", "VP Engineering"]`
- `["Founder", "CEO"]`
## AI Enrichment
Use the `criteria` parameter in `people_filters` to score people against custom criteria.
Each person will be evaluated and scored (0-5) with reasoning for each criterion.
## Pricing
- **First 100 results are free** (including AI enrichment)
- **1.0 credit** per person after the first 100
- **+0.1 credits** per person per criterion after the first 100
Example: 150 people with 2 criteria = 50 billable × (1.0 + 0.1 × 2) = 60 credits (first 100 are free)
Empty results = 0 credits.
Request Body
Request body required
Responses
200: Successful Response401: Invalid or missing API key. Include `X-API-Key` header.402: Insufficient credit balance. Top up your account.422: Validation error. Check request body and parameters.429: Rate limit exceeded (10000/hour) or concurrent limit reached (150 per organization).500: Internal server error. Contact support if persists.504: Request timeout. Please try again later.
POST /public/api/v1/search/people-by-domains
People by Domains
Find people at companies by their domains.
**How it works:**
1. Provide a list of company domains (up to 1000) and job titles to search for
2. The system finds companies by domains
3. Returns up to `people_per_company` people per found company with matching job titles
**Job title matching:**
- Uses semantic search: "Head of Sales" will match "VP Sales", "Sales Director", etc.
- Multiple job titles are combined with OR logic
**Parameters:**
- `people_per_company`: Number of people to return per company (1-1000, default: 1)
**Limits:**
- Maximum 1000 domains per request
- Maximum 20 job titles per request
- Maximum 1000 people per company
- Maximum 10000 people per response (total)
**Billing:**
- 1 credit per person returned
Request Body
Request body required
Responses
200: Successful Response401: Invalid or missing API key. Include `X-API-Key` header.402: Insufficient credit balance. Top up your account.422: Validation error. Check request body and parameters.429: Rate limit exceeded (10000/hour) or concurrent limit reached (150 per organization).500: Internal server error. Contact support if persists.504: Request timeout. Please try again later.
POST /public/api/v1/search/nl-to-filters
NL to Filters
Convert a free-form natural language query into structured filters for companies and people search.
## How It Works
Send any query in plain English (or another language), for example:
- `"SaaS companies using Stripe"`
- `"Founders of AI startups in Germany"`
- `"B2B fintech companies in US and Canada"`
The endpoint returns parsed filters in the same shape used by search endpoints:
- `companies_filters`
- `people_filters`
- `focus` (`companies` or `people`)
This endpoint does not perform a search and does not charge credits.
Request Body
Request body required
Responses
200: Successful Response401: Invalid or missing API key. Include `X-API-Key` header.402: Insufficient credit balance. Top up your account.422: Validation error. Check request body and parameters.429: Rate limit exceeded (10000/hour) or concurrent limit reached (150 per organization).500: Internal server error. Contact support if persists.504: Request timeout. Please try again later.
POST /public/api/v1/enrich/email
Find email by name
Find email address for a single person.
## How It Works
Provide the person's first name, last name, and company domain.
## Presets
| Preset | Cost | Success Rate | Description |
|--------|------|--------------|-------------|
| **basic** | 1.5 credits | ~50% | Single provider, pattern-based lookup. Fast and cheap. |
| **premium** | 5.0 credits | ~78% | 6 providers with cross-validation. Higher accuracy. |
## Pricing
You are only charged when an email is found.
Email not found = 0 credits.
Request Body
Request body required
Responses
200: Successful Response401: Invalid or missing API key. Include `X-API-Key` header.402: Insufficient credit balance. Top up your account.422: Validation error. Check request body and parameters.429: Rate limit exceeded (10000/hour) or concurrent limit reached (150 per organization).500: Internal server error. Contact support if persists.504: Request timeout. Please try again later.
POST /public/api/v1/enrich/email/batch
Find email by name (batch request)
Find email addresses for multiple contacts in one request (async).
**How it works:**
1. Submit up to 100 contacts with first_name, last_name, company_domain
2. Receive a `task_id` immediately
3. Poll GET endpoint with `task_id` to check status and retrieve results
**Limits:**
- Maximum 100 contacts per batch
**Pricing:**
- **basic**: 1.5 credits per found email
- **premium**: 5 credits per found email
- Only charged for emails found (not found = 0 credits)
Request Body
Request body required
Responses
200: Successful Response401: Invalid or missing API key. Include `X-API-Key` header.402: Insufficient credit balance. Top up your account.422: Validation error. Check request body and parameters.429: Rate limit exceeded (10000/hour) or concurrent limit reached (150 per organization).500: Internal server error. Contact support if persists.504: Request timeout. Please try again later.
GET /public/api/v1/enrich/email/batch/{task_id}
Find email by name (batch results)
Check status and retrieve results for a batch request.
**Statuses (in meta.status):**
- `pending` — processing in progress, poll again in a few seconds
- `completed` — results ready, `contacts` array contains enriched data
- `failed` — error occurred, see `meta.error` for details
**Response structure:**
- `contacts` — null while pending, array when completed
- `meta.status` — current processing status
- `meta.error` — error description (null if no error)
- `meta.credits_charged` — credits used (only charged for found emails)
**Typical workflow:**
1. POST to submit batch, get `task_id`
2. GET with `task_id`, check `meta.status`
3. If `pending`, wait 2-5 seconds and poll again
4. When `completed`, read `contacts` array
Parameters
task_id (path, required): Task ID returned from POST request
Responses
200: Successful Response401: Invalid or missing API key. Include `X-API-Key` header.402: Insufficient credit balance. Top up your account.422: Validation error. Check request body and parameters.429: Rate limit exceeded (10000/hour) or concurrent limit reached (150 per organization).500: Internal server error. Contact support if persists.504: Request timeout. Please try again later.404: Batch not found
GET /public/api/v1/tasks
List batch enrichment tasks
List all batch email enrichment tasks for your API key.
**Use cases:**
- Track status of submitted batch requests
- Find task IDs you may have lost
- Monitor pending vs completed tasks
**Response:**
- `tasks` — array of task objects with status and result URL
- `total` — total count for pagination
**Filtering:**
- Use `status` parameter to filter by task status (pending, completed, failed)
Parameters
status (query, optional): Filter by task statuslimit (query, optional): Maximum number of tasks to returnoffset (query, optional): Number of tasks to skip (for pagination)
Responses
200: Successful Response422: Validation Error
GET /public/api/v1/agents
List Explee agents
Returns all pre-built Explee agents. Each agent has a fixed system prompt, input/output schema, and search strategy. Use the agent `id` with the "Run Explee agent" endpoint.
Responses
200: Successful Response401: Invalid or missing API key. Include `X-API-Key` header.402: Insufficient credit balance. Top up your account.422: Validation error. Check request body and parameters.429: Rate limit exceeded (10000/hour) or concurrent limit reached (150 per organization).500: Internal server error. Contact support if persists.504: Request timeout. Please try again later.
POST /public/api/v1/agents/{agent_id}/runs
Run Explee agent
Run a pre-built Explee agent by its ID. Explee agents come with a tuned system prompt, search strategy, and output schema — you only provide the input data.
Use `GET /public/api/v1/agents` to browse available agents and their expected input schemas.
**Cost**: 1 credit per run.
Parameters
agent_id (path, required)
Request Body
Request body required
Responses
200: Successful Response401: Invalid or missing API key. Include `X-API-Key` header.402: Insufficient credit balance. Top up your account.422: Validation error. Check request body and parameters.429: Rate limit exceeded (10000/hour) or concurrent limit reached (150 per organization).500: Internal server error. Contact support if persists.504: Request timeout. Please try again later.404: Agent not found
POST /public/api/v1/agents/runs
Run custom agent
Run a fully custom agent — you provide the system prompt, input/output schemas, and input data.
Use this when Explee's pre-built agents don't fit your use case. The agent will execute asynchronously; poll `GET /agents/runs/{job_id}` for results.
**Cost**: 1 credit per run.
Request Body
Request body required
Responses
200: Successful Response401: Invalid or missing API key. Include `X-API-Key` header.402: Insufficient credit balance. Top up your account.422: Validation error. Check request body and parameters.429: Rate limit exceeded (10000/hour) or concurrent limit reached (150 per organization).500: Internal server error. Contact support if persists.504: Request timeout. Please try again later.
GET /public/api/v1/agents/runs/{run_id}
Get agent run status
Get the current status of an agent run.
Returns `input` (original input data), `result` (agent output on success), and `meta` (status, progress, timing).
Parameters
Responses
200: Successful Response401: Invalid or missing API key. Include `X-API-Key` header.402: Insufficient credit balance. Top up your account.422: Validation error. Check request body and parameters.429: Rate limit exceeded (10000/hour) or concurrent limit reached (150 per organization).500: Internal server error. Contact support if persists.504: Request timeout. Please try again later.
POST /public/api/v1/web/search
Web Search
Search the web using our internal search infrastructure.
Returns up to 10 organic search results (title, snippet, URL) for a given query.
If fewer results are available, returns as many as found.
## Pricing
- **Flat rate: 0.005 credits per request** ($0.05 per 1,000 requests)
## Rate Limit
- **400,000 requests per hour** per API key
Request Body
Request body required
Responses
200: Successful Response401: Invalid or missing API key. Include `X-API-Key` header.402: Insufficient credit balance. Top up your account.422: Validation error. Check request body and parameters.429: Rate limit exceeded (10000/hour) or concurrent limit reached (150 per organization).500: Internal server error. Contact support if persists.504: Request timeout. Please try again later.