API Platform
Real, provenance-tracked entity records — schema.org structured data, a genuine co-citation knowledge graph, and per-fact source tracking (self-reported vs admin-verified) instead of a flat, unqualified record. Built for local businesses too small to ever get a Wikipedia page.
10,000 requests/month · flat rate, no overage surprises
Already have an agency account? Get your key from the agency dashboard instead — no separate signup needed.
Authorization: Bearer vai_live_<your_key>Requests without a key still work (for existing AI-agent/crawler access) but are limited to 500/day per IP. A valid key raises that to 10,000/month and unlocks claims-history mode.
/api/v2/entity-profile?slug=<slug>Full structured entity record for a business — identity, contact, AI signals, services, schema.org JSON-LD, and provenance-tracked claims.
/api/v2/entity-profile?slug=<slug>&history=trueSame as above plus full claims history (superseded facts included) — requires an API key.
/api/v2/knowledge-graph?businessId=<id>&type=networkA business's real co-citation network — which other businesses it's been mentioned alongside.
/api/v2/knowledge-graph?category=<category>&city=<city>&type=complementaryCategories that genuinely co-occur with a given category in a city, derived from real content, not a hardcoded list.
/entity/{id}?format=jsonStable canonical entity lookup by immutable ID — survives business renames/re-slugging.
Full OpenAPI spec: /api/openapi.json
Query-only — POST /api/graphql. This app runs on standard serverless functions with no persistent process, so there are no GraphQL subscriptions here. For real-time updates, use webhooks below instead (the same split GitHub's own public GraphQL API uses).
query {
entity(slug: "sharma-ca-mumbai") {
name
category
claims { property value source confidence }
structuredData
}
}Get notified when entity data changes instead of polling. Requires an API key. Events:
entity.updated — profile edited or re-registeredentity.verified — an admin verified or revoked a GST/MCA claimcitation.appeared — a real AI platform newly cited this businesscitation.lost — a real, tracked score drop was detected on a platformcompetitor.overtook — a real competitor crossover was detectedcurl -X POST https://visibilityai.in/api/developers/webhooks \
-H "Authorization: Bearer vai_live_<your_key>" \
-H "Content-Type: application/json" \
-d '{"url": "https://you.example.com/hook", "events": ["entity.updated"]}'The response includes a secret shown once — verify every delivery using the X-VisibilityAI-Signature header (HMAC-SHA256 of the raw request body with your secret) before trusting the payload.
Failed deliveries are retried automatically (up to 5 attempts, exponential backoff) — nothing is dropped silently.
When Claude is asked "best CA in Mumbai" or "top lawyers in Delhi", it can call our MCP server and get real, verified data from VisibilityAI's database — instead of hallucinating or giving a generic answer.
search_indian_businessesFind businesses by category + city
get_business_detailsFull profile by slug
get_category_guideExpert guide for a category + city
get_market_statsMarket stats for a category + city
Register with Claude Code:
claude mcp add visibilityai -- node /full/path/to/mcp-server/dist/index.jsNot using MCP? The same data is reachable over plain HTTP via /api/mcp (JSON-RPC), /api/agent-discovery, and /api/agentic-gateway for non-MCP agent frameworks that need a machine-to-machine handshake instead.
Claude Desktop calling search_indian_businesses