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: 100 requests per hour, 2 concurrent requests per organization. Timeout: 90s.

Authentication

ApiKeyAuth: apiKey - Get your API key at [Organization Settings](https://explee.com/organization#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 - **0.5 credits** per company returned - **+0.1 credits** per company per criterion (AI enrichment) Example: 100 companies with 2 criteria = 100 × (0.5 + 0.1 × 2) = 70 credits Empty results = 0 credits.

Request Body

Request body required

Responses

  • 200: Successful Response
  • 401: 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 (100/hour) or concurrent limit reached (2 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 - **1.0 credit** per person returned - **+0.1 credits** per person per criterion (AI enrichment) Example: 100 people with 2 criteria = 100 × (1.0 + 0.1 × 2) = 120 credits Empty results = 0 credits.

Request Body

Request body required

Responses

  • 200: Successful Response
  • 401: 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 (100/hour) or concurrent limit reached (2 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 Response
  • 401: 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 (100/hour) or concurrent limit reached (2 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 Response
  • 401: 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 (100/hour) or concurrent limit reached (2 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 Response
  • 401: 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 (100/hour) or concurrent limit reached (2 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 Response
  • 401: 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 (100/hour) or concurrent limit reached (2 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 status
  • limit (query, optional): Maximum number of tasks to return
  • offset (query, optional): Number of tasks to skip (for pagination)

Responses

  • 200: Successful Response
  • 422: Validation Error