anVendor API and MCP server
Use anVendor from your own code and AI assistants: analyze companies, scan a service across up to 10,000 companies and discover companies, with API keys, per-key budgets and the same credits as the app.
Getting started
- Create a key on your account's API page. Choose the methods it may call, an optional credit budget (per day, per month or in total, UTC) and an optional expiry date. The key is shown once — store it safely.
- Send it on every request as
Authorization: Bearer avk_…. Base URL:https://api.anvendor.com/v1. - Requests spend your account's credits at the same prices as the app: 1 credit per company analysis, and 1 credit per company confirmed to use a service. Discovering companies is free. A check that finds nothing, or fails, is refunded. A key's budget caps what that key can spend on top of your balance.
- Every charge made through a key is listed in your spending history on the Billing page, labelled with the key's name — or with the app's, for an app you connected by signing in.
curl https://api.anvendor.com/v1/balance \ -H "Authorization: Bearer avk_…"
How requests behave
- JSON in, JSON out. Credits are decimals (1 = one credit); money is USD.
- Scans take minutes — longer for a large company. Starting one returns at once with an id and
pollAfterSeconds(also sent asRetry-After); check back after that. No clock cancels a scan while it waits in the queue. - Repeating a request is safe: a second analysis of a company already being scanned attaches to the first, and a company you already paid for is not charged again.
- Results less than 30 days old are fresh. A pair checked within 30 days by anyone is answered from that check, free when nothing was found. Use
refreshto pay for a new live scan. - A finding shows that a company uses a vendor. It is not proof of a paid contract, and “not detected” does not prove non-use.
Methods
GET /v1/balance
Your plan, credits left (plan allowance and extra credits) and this key's budget. Available to every key.
POST /v1/analyses
Analyze a company: every tracked service it uses, with estimated adoption and estimated annual spend. Key method: analyze. Costs 1 credit, refunded when nothing is found; a fresh result you already paid for is returned free.
curl -X POST https://api.anvendor.com/v1/analyses \
-H "Authorization: Bearer avk_…" -H "Content-Type: application/json" \
-d '{"company": "acme.com"}'
# 202 Accepted
{ "id": "…", "status": "pending", "pollAfterSeconds": 60, "services": [], … }company is a domain, a website URL or a company name. Add "refresh": true to scan again even when a fresh result exists.
GET /v1/analyses/{id}
Poll an analysis. status is pending, done or failed; when done, company and services carry the result.
{ "id": "…", "status": "done",
"company": { "domain": "acme.com", "name": "Acme", "headcount": 900, "location": "Oakland, CA, US", … },
"services": [ { "name": "Slack", "domain": "slack.com", "adoptionPercent": 40,
"estimatedAnnualSpend": { "lowUsd": 12500, "highUsd": 48000, "openEnded": false, "label": "$12.5k – $48k / yr" } } ],
"dataDate": "2026-09-20T…", "stale": false, "partial": false }POST /v1/scans
Check one service at a list of companies. Key method: scan. Costs 1 credit per company confirmed to use the service; refunded when it is not found; free for a company you already paid for, or one checked within 30 days and found not to use it.
curl -X POST https://api.anvendor.com/v1/scans \
-H "Authorization: Bearer avk_…" -H "Content-Type: application/json" \
-d '{"service": "slack.com", "companies": ["acme.com", "Globex Corporation"]}'companiestakes up to 10,000 domains, website URLs or company names.- Up to 100 domains: all or nothing — refused with
402unless every chargeable company is affordable; answers we already hold come back at once. - More than 100, or any company name: the scan runs in the background and stops at what your balance and the key's budget cover. A name is matched to at most one company with the same name; a name with no match is reported as
unresolvedand never charged. Domains are the most precise input. "dryRun": truereturns a quote — companies, free answers, the maximum charge and how many your balance covers — and starts nothing."refresh": truere-scans one company you already paid for, and charges again.
GET /v1/scans/{id}?offset=0&limit=100
A scan's progress and a page of results, one per company in the order given. Each result has status (pending, done, error, unfunded, resolving, unresolved, excluded), detected (true, false or null) and, for a confirmed company, its figures. GET /v1/scans lists your 50 most recent scans.
POST /v1/leads/search
Discover companies for a service — free. Key method: leads. Companies known to use the service come first; figures stay hidden (locked) until you scan the company for that service.
curl -X POST https://api.anvendor.com/v1/leads/search \
-H "Authorization: Bearer avk_…" -H "Content-Type: application/json" \
-d '{"service": "hubspot.com", "headcount": ["51-200", "201-500"],
"locations": [{"kind": "country", "label": "Spain", "value": {"country": "ES"}}]}'Filters: locations (objects from GET /v1/leads/filters or GET /v1/leads/locations?q=…, passed back unchanged), one industry, headcount buckets, or a companies list instead of filters. Pass the response's next back as offset or companyCursor for the next page; up to 10,000 companies are reachable.
GET /v1/openapi.json
The full OpenAPI 3.1 description. No key needed.
Errors
Errors are JSON: {"error": {"code": "…", "message": "…"}}.
400 invalid_request— malformed JSON or a field that does not validate.401 invalid_api_key— missing, invalid, expired or revoked key.403 insufficient_scope— the key may not call this method;api_disabled— API access is off for the account.402 insufficient_credits— the balance cannot cover it;budget_exceeded— the key's budget cannot.404 not_found,405 method_not_allowed.429 rate_limited— slow down and retry afterRetry-Afterseconds. Starting scans and searching leads share your account's limits with the app; each key is also limited to 120 requests a minute.500 internal_error,503 unavailable— retry later.
MCP server for AI assistants
The same methods, as tools for MCP clients: https://api.anvendor.com/mcp (Streamable HTTP). The tools listed are the methods the connection may call: get_balance, analyze_company, get_analysis, scan_service, get_scan, list_scans, search_leads, get_lead_filters, suggest_locations. A scan of more than one company returns a quote first and starts only when called again with confirm: true, so an assistant asks before spending. A budget keeps an assistant within it.
Connect by signing in (claude.ai, ChatGPT and other connectors)
Add https://api.anvendor.com/mcp as a custom connector. The app sends you to anVendor: sign in as usual — email and password, Google or LinkedIn — then choose the methods it may call and a credit budget (50 credits a month unless you change it), and allow it. No key to copy. The app appears under Connected apps on your API page, where you can see what it spent and disconnect it. A connection nobody uses for 90 days lapses.
For client developers: OAuth 2.1 with PKCE (S256) and dynamic client registration. Discovery starts at https://api.anvendor.com/.well-known/oauth-protected-resource (also sent in the WWW-Authenticate header of a 401 from /mcp); the authorization server is https://anvendor.com. Access tokens last an hour; refresh tokens rotate on every use, and presenting a used one disconnects the app.
Connect with a key
Claude Code:
claude mcp add --transport http anvendor https://api.anvendor.com/mcp \ --header "Authorization: Bearer avk_…"
Cursor, VS Code and other clients (JSON configuration):
{
"mcpServers": {
"anvendor": {
"url": "https://api.anvendor.com/mcp",
"headers": { "Authorization": "Bearer avk_…" }
}
}
}