API Reference

Veritas answers one question: "Does this business actually exist?" It cross-references multiple public data sources and returns a structured JSON confidence assessment.

Authentication

All API requests require an API key passed in the x-api-key header. Keys start with vrt_.

curl -H "x-api-key: vrt_your_key_here" ...

POST /api/verify

The core endpoint. Send a business name and location, get back a structured confidence assessment.

Request
POST /api/verify
Content-Type: application/json
x-api-key: vrt_your_key_here

{
  "business_name": "Blue Bottle Coffee",
  "location": "Oakland, CA"
}

business_name

Required. The name of the business to verify.

location

Required. City and state/country, e.g. "Oakland, CA" or "London, UK".

Response Schema

200 OK
{
  "query": {
    "business_name": "Blue Bottle Coffee",
    "location": "Oakland, CA"
  },
  "result": {
    "existence_confidence": "high",
    "confidence_score": 92,
    "signals": {
      "google_places": {
        "found": true,
        "name_match": "exact",
        "rating": 4.5,
        "review_count": 1247,
        "business_status": "OPERATIONAL",
        "types": ["cafe", "store", "food"],
        "formatted_address": "300 Webster St, Oakland, CA 94607, USA"
      },
      "domain": {
        "found": true,
        "url": "bluebottlecoffee.com",
        "resolves": true,
        "ssl_valid": true,
        "domain_age_days": 5842,
        "registrar": "MarkMonitor Inc."
      },
      "web_presence": {
        "social_signals_detected": true,
        "linkedin_found": true,
        "consistent_nap": true
      }
    },
    "flags": [],
    "checked_at": "2026-03-02T14:30:00Z"
  },
  "meta": {
    "cached": false,
    "response_time_ms": 847,
    "degraded_signals": []
  }
}

Confidence Scoring

high
80-100

3+ strong signals confirmed (Google Places match + domain resolves + domain age > 365 days)

medium
50-79

2 signals confirmed OR signals present but weak (new domain, few reviews)

low
20-49

1 signal confirmed, others missing or inconsistent

none
0-19

No signals found, business likely does not exist

Flags

Flags are warnings, not blockers. They indicate areas of concern an agent should consider.

new_domain

Domain registered < 90 days ago

no_website

No website found for business

name_mismatch

Google Places name differs from query

no_reviews

Google Places listing has 0 reviews

no_physical_address

No verifiable physical address

ssl_expired

Website SSL certificate is expired or invalid

Error Responses

400
INVALID_JSON

Request body is not valid JSON

401
MISSING_API_KEY

No x-api-key header provided

401
INVALID_API_KEY

API key not found or invalid

403
KEY_DISABLED

API key has been disabled

422
INVALID_REQUEST

Missing business_name or location

429
RATE_LIMIT_EXCEEDED

Per-minute rate limit reached

429
MONTHLY_LIMIT_EXCEEDED

Monthly request quota reached

500
INTERNAL_ERROR

Unexpected server error

Error format
{
  "error": {
    "code": "INVALID_REQUEST",
    "message": "Request must include non-empty 'business_name' and 'location' strings"
  }
}

MCP Server

Veritas ships as an MCP server for direct integration with agent platforms (Claude, OpenAI, etc.).

claude_desktop_config.json / mcp settings
{
  "mcpServers": {
    "veritas": {
      "command": "npx",
      "args": ["@veritas-api/mcp-server"],
      "env": {
        "VERITAS_API_KEY": "vrt_your_key_here"
      }
    }
  }
}

The MCP server exposes one tool: verify_business. It accepts business_name and location and returns the full verification response.

Streamable HTTP (no install required)

Agents that support MCP over HTTP can connect directly to the hosted endpoint:

MCP HTTP endpoint
POST https://veritas-api.vercel.app/api/mcp
Content-Type: application/json

// Standard MCP JSON-RPC — stateless, no session management needed

Rate Limits

PlanRequests/moRate limitPrice
Free1005/min$0
Builder5,00030/min$29/mo
Scale50,000120/min$99/mo

Rate-limited responses return 429 with a Retry-After header.

Caching

Verification results are cached for 24 hours, keyed on normalized business name + location. Cached responses have meta.cached: true and incur no API cost. Agents can use this to make repeated checks essentially free.