API Platform

Structured business entity data, built for AI agents

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.

₹4,999/month

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.

Authentication

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.

Endpoints

GET/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.

GET/api/v2/entity-profile?slug=<slug>&history=true

Same as above plus full claims history (superseded facts included) — requires an API key.

GET/api/v2/knowledge-graph?businessId=<id>&type=network

A business's real co-citation network — which other businesses it's been mentioned alongside.

GET/api/v2/knowledge-graph?category=<category>&city=<city>&type=complementary

Categories that genuinely co-occur with a given category in a city, derived from real content, not a hardcoded list.

GET/entity/{id}?format=json

Stable canonical entity lookup by immutable ID — survives business renames/re-slugging.

Full OpenAPI spec: /api/openapi.json

GraphQL

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
  }
}

Webhooks

Get notified when entity data changes instead of polling. Requires an API key. Events:

curl -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.

MCP Server

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_businesses

Find businesses by category + city

get_business_details

Full profile by slug

get_category_guide

Expert guide for a category + city

get_market_stats

Market stats for a category + city

Register with Claude Code:

claude mcp add visibilityai -- node /full/path/to/mcp-server/dist/index.js

Not 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