Developer guide

Vera API

Push briefs, signals, and watchlist alerts into your CRM, n8n, Slack — anywhere your team works. API access is standard on every paid plan; create your key in dashboard Settings after onboarding.

Show samples in

Authentication

Every request takes a Bearer token. Create keys in Settings → API keys.

Authorization: Bearer vera_live_<your_key>
text

API access is gated to Growth and Enterprise tiers. Rate limits: 60 req/min on Growth, 300 req/min on Scale. Over-limit responses include Retry-After and X-RateLimit-Remaining headers.

Auth

GET/api/v1/public/usage

Get usage

Current month's enrichment credit usage and remaining balance. The simplest endpoint to test your key works.

curl https://api.veraa.ai/api/v1/public/usage \
  -H "Authorization: Bearer vera_live_..."
curl

Leads

GET/api/v1/public/leads

List leads

Paginated list of leads in your pipeline. Filter by rating (hot/warm/cold) or status.

curl "https://api.veraa.ai/api/v1/public/leads?rating=hot&limit=20" \
  -H "Authorization: Bearer vera_live_..."
curl
GET/api/v1/public/leads/{lead_id}

Get a lead

Full lead record including the entire enrichment_data blob — tech stack, news, threat alerts, GTM briefing, website intel.

curl https://api.veraa.ai/api/v1/public/leads/8f4cab97-... \
  -H "Authorization: Bearer vera_live_..."
curl
GET/api/v1/public/leads/{lead_id}/briefing

Get just the briefing

Trim view that returns only the GTM briefing for piping into a CRM activity, Slack message, or email sequencer without pulling the full enrichment blob.

curl https://api.veraa.ai/api/v1/public/leads/8f4cab97-.../briefing \
  -H "Authorization: Bearer vera_live_..."
curl
POST/api/v1/public/leads

Create a lead

Add a new lead to your pool. Provide at least one of email or linkedin_url. Set enrich=true to enrich + score it inline (consumes 1 credit).

curl -X POST https://api.veraa.ai/api/v1/public/leads \
  -H "Authorization: Bearer vera_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "email": "ceo@example.com",
    "linkedin_url": "https://linkedin.com/in/...",
    "company_name": "Example Co",
    "company_domain": "example.com",
    "enrich": true
  }'
curl
POST/api/v1/public/leads/enrich

Enrich existing leads

Trigger full enrichment + scoring for one or more existing leads. Consumes 1 credit per lead. Returns 402 if you'd exceed your monthly limit.

curl -X POST https://api.veraa.ai/api/v1/public/leads/enrich \
  -H "Authorization: Bearer vera_live_..." \
  -H "Content-Type: application/json" \
  -d '{"lead_ids": ["8f4cab97-...", "abc12345-..."]}'
curl

Signals

GET/api/v1/public/signals

List signals

Recent signals detected across your prospects. Filter by signal_type to narrow.

curl "https://api.veraa.ai/api/v1/public/signals?signal_type=cve_in_stack&limit=50" \
  -H "Authorization: Bearer vera_live_..."
curl

Watchlist

POST/api/v1/public/watchlist

Add to watchlist

Add a company to the watchlist. Vera's weekly monitor polls watched companies for changes (new blog posts, leadership changes, breach exposure) and surfaces alerts via the signals endpoint and webhooks.

curl -X POST https://api.veraa.ai/api/v1/public/watchlist \
  -H "Authorization: Bearer vera_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "company_name": "Acme Corp",
    "company_domain": "acme.com",
    "priority": 5
  }'
curl

Webhooks

Real-time event delivery

Configure webhook endpoints in Settings → Webhooks. Vera POSTs signed JSON to your URL whenever the events you subscribed to fire.

Verify the signature (Node)
import crypto from "node:crypto";

app.post("/webhooks/vera", express.raw({type: "application/json"}), (req, res) => {
  const sig = req.headers["x-vera-signature"];
  const expected = "sha256=" + crypto
    .createHmac("sha256", VERA_WEBHOOK_SECRET)
    .update(req.body)
    .digest("hex");

  if (!crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(sig))) {
    return res.status(401).send("invalid signature");
  }

  const event = JSON.parse(req.body);
  // event.id, event.event, event.created_at, event.data
  res.sendStatus(204);
});
js
Available event types
lead.createdlead.enrichedlead.scoredlead.rated_hotbrief.createdwatchlist.alert_createdsignal.detectedthreat.matched_to_lead
Retries

0s → 30s → 5min → 1hr → 6hr → 24hr, then dead. Manually replay from the dashboard.

Idempotency

Each delivery has X-Vera-Delivery — store the ID and reject duplicates.

Headers

X-Vera-Signature (HMAC), X-Vera-Event (type), X-Vera-Delivery (id).

Need an endpoint we don't have? Tell us during onboarding.