---
name: quickleaves
description: Look up B2B companies with the Quick Leaves API or its MCP server - firmographics, technographics, open roles, publicly evidenced customers, partner platforms, vendors, competitors and similar companies, company search by meaning, the people and executives a company publishes, public profiles and work e-mail. Use when a task needs facts about a company from its domain, its customers, vendors or competitors, companies that match a description, or enrichment of a list of domains.
---

# Quick Leaves API

Quick Leaves API answers B2B company questions from data built from the public web. Calls are billed in credits.

Skill version `4d7254ee6494`. Get the current copy from https://api.quickleaves.com/skills/quickleaves/SKILL.md. Get it again when an answer has a field, tool or error code that this file does not name, and at least once a week; replace your copy when the version differs.

## Setup

- Key: the environment variable `QUICKLEAVES_API_KEY`. Send it as `X-API-Key: <key>` or `Authorization: Bearer <key>`. Never print it.
- REST base URL: `https://api.quickleaves.com/api/v1`. MCP: `https://api.quickleaves.com/mcp` (stateless Streamable HTTP, same key).
- Full reference with example answers: `https://api.quickleaves.com/llms-full.txt`. OpenAPI: `https://api.quickleaves.com/openapi/v1.json`.

## MCP tools

- `company_details`: Company profile: firmographics, technographics, hiring. Never-seen companies are crawled (partial data, or queued). Costs 2 credits (+1 with fresh=true); 1 when no company is found; 0 when queued or, with cache=only, not stored.
- `company_customers`: Customers publicly evidenced for the company, verified domains only unless includeUnverified, with evidence quotes; include=partners adds partner platforms from its integration and partner pages. Pages of up to 200 per list; pass next_cursor or partners_next_cursor back as cursor. Costs 1 credit + 2 per row returned over all lists; 0 when queued.
- `company_vendors`: Vendors of the company: companies whose own pages publicly name it as a customer, with the vendor's evidence page and quote. Rows only when the company's domain is verified unless includeUnverified (an empty list held back for that reason is free). Answers from stored data only; an unknown company is not_in_graph at no cost. Pages of up to 200. Costs 1 credit + 2 per vendor returned.
- `company_people`: People named on the company's own team, about and leadership pages, with the published title, executive roles (ceo, cto, founder, …), seniority and the page where each was seen; executives first. Filter by seniority, role or title. No e-mail: use work_email_lookup. Pages of up to 100. Costs 1 credit + 1 per person returned; 0 when queued or for an empty partial list.
- `company_competitors`: Competitors: evidenced (compare pages) first, then similar companies (basis similar, same market, not confirmed competitors). Costs 3 credits; 0 when queued or for an empty partial list.
- `company_status`: Enrichment status of a company (complete, partial, refreshing, queued, not_found) without starting a crawl. Free.
- `company_batch`: Company details for up to 50 domains in one call, one result per input (found, queued, queue_full, not_found, invalid). Never crawls while you wait. Costs 2 credits per distinct found domain.
- `company_search`: Finds enriched companies by what they do, from a plain-words query; rows have the company card and similarity and match_score, and an answer may be empty. Never crawls. Costs 1 credit per started 50 rows; 0 when empty.
- `profile_lookup`: The person described by an openly published page (bio, speaker page). Login-walled and people-search sites are rejected. Costs 2 credits (+1 with fresh=true); 0 when no person is found.
- `work_email_lookup`: Finds and checks a work e-mail; no e-mail is sent. Billed by verdict: valid 2 credits, likely_valid_pattern or catch_all_domain 1, unknown or invalid 0.
- `credits_balance`: The credit balance, split into plan and pay-as-you-go credits with their expiry dates. Free.
- `usage`: Requests by status class and credits charged, per UTC day and operation, over at most 92 days. Free.

## Prices

Errors, `202`, `404`, `429` and `503` answers cost no credits, except `404 company_not_found` from `/company/details`, which costs 1. A call is refused with `402` before any work when the balance is below its maximum price.

| Endpoint | Credits | Free when |
| --- | --- | --- |
| `GET /api/v1/company/details` | 2 (+1 with `fresh=true`); 1 for `404 company_not_found` | `202` queued, `404 not_in_graph` with `cache=only` |
| `GET /api/v1/company/customers` | 1 + 2 per row returned over all lists (`include=customers,partners`), at most 401 a page per list | `202` queued |
| `GET /api/v1/company/vendors` | 1 + 2 per vendor returned, at most 401 a page | `404 not_in_graph`, an empty list held back because the company's domain is not verified |
| `GET /api/v1/company/people` | 1 + 1 per person returned, at most 101 a page; executives in details are free | `202` queued, an empty list while `partial` |
| `GET /api/v1/company/competitors` | 3 | `202` queued, an empty list while `partial` |
| `POST /api/v1/company/batch` | 2 per distinct found domain (up to 50 entries) | `queued`, `queue_full`, `not_found`, `invalid` and duplicate entries |
| `GET /api/v1/company/search` | 1 per started 50 rows returned | an empty answer |
| `GET /api/v1/company/status` | 0 | |
| `GET /api/v1/profile` | 2 (+1 with `fresh=true`) | no person found |
| `POST /api/v1/work-email/lookup` | `valid` 2, `likely_valid_pattern` or `catch_all_domain` 1, `unknown` or `invalid` 0 | |
| `GET /api/v1/credits`, `GET /api/v1/usage`, `GET /api/v1/pricing`, `GET /api/v1/billing/plans`, `POST /api/v1/billing/checkout` | 0 | |
| `POST /mcp` (each tool) | the price of the endpoint the tool calls | the same cases |

## Rules

1. Use `company_batch` for a list of domains, not a loop of `company_details`. A batch never crawls while you wait and charges only found domains.
2. Use `cache=only` for a cheap check: it reads stored data, never starts a crawl, and an unknown company is a free `not_in_graph`. Do not send it together with `fresh=true`.
3. `company_details` without `cache=only` costs 1 credit when no company is found (`company_not_found`). Do not send it guessed domains; check them with `cache=only` or a batch first.
4. A never-seen company is crawled in the background. On `202` or `enrichment_status: queued`, poll the free `company_status` until it is `complete`, with the `Retry-After` delay. Do not repeat a paid call to wait.
5. `partial` means some fields are still being filled: industry, business model and similar companies can be missing.
6. `company_search` finds enriched companies by the meaning of plain words. It never crawls, so a company we have no data for is not found. It can return fewer rows than asked, or none (free).
7. On `/company/customers`, only verified customer domains come back by default. Add `include=partners` for partner platforms (integrations and partner pages); every row of every list costs the same, so ask only for the lists you need. Investors are not offered. For more than one page, pass `next_cursor` (customers) or `partners_next_cursor` (partners) back as `cursor`, with only that list in `include` and the same other parameters.
8. Use `company_vendors` to answer "which vendors name this company as a customer". It answers from stored data only, so it never crawls; an unknown company is a free `not_in_graph`. When `company_domain_status` is not `verified`, the list is empty and free; send `include_unverified` only when the user accepts guessed matches.
9. Use `company_people` for the people a company publishes on its own pages; filter with `role` (e.g. `ceo`) or `seniority` (e.g. `c_suite`) so you pay only for the rows you need. For executives alone, `company_details` already has `executives` at no extra cost. A list has no e-mail; call `work_email_lookup` only for the person you need. Never present a title as current beyond its `last_verified_at`.
10. A competitor row with `basis: "similar"` is a company in the same market, not a confirmed competitor. Say so when you report it. Its `confidence` is how often such rows are real competitors.
11. Branch on the error `code`, never on the message. `402 insufficient_credits` has `required_credits`. `403 organization_suspended` stops every call of the organization (for example during a payment dispute): stop and tell the user to contact support@quickleaves.com. `429` and `503` are free; wait for `Retry-After`.
12. Run independent read-only calls in parallel. Stay under the key's rate limit (`X-RateLimit-Remaining`). A trial organization (console sign-up, no payment yet) has 60 requests a minute per key, 3 never-seen companies waiting at once and 25 new ones a UTC day; on `queue_full`, poll `company_status` for the waiting ones instead of adding more.
13. Customer, vendor and evidenced competitor rows carry `evidence` (a page and a quote). Quote it when the user must trust a claim.
14. To buy credits, `POST /api/v1/billing/checkout` returns a hosted checkout URL for the user to open; credits arrive only after the payment. A workspace holds one subscription: a second subscription checkout is `409 subscription_exists`, and the owner changes the plan in the console instead (an upgrade at once with a new cycle and the new plan's full credits, a downgrade at the next billing date). Packs can be bought at any time. `GET /api/v1/pricing` lists the plans with their `rank` (higher is bigger).

Error codes: `invalid_request`, `invalid_domain`, `invalid_url`, `conflicting_parameters`, `batch_too_large`, `invalid_api_key`, `invalid_signature`, `insufficient_credits`, `organization_suspended`, `not_found`, `company_not_found`, `profile_not_found`, `not_in_graph`, `payload_too_large`, `rate_limited`, `queue_full`, `callback_limit`, `callbacks_disabled`, `subscription_exists`, `internal_error`, `upstream_error`, `busy`.
