Skip to content

Intent & Signals

graph8’s intent surface is two layers:

  1. /api/v1/intent/* — full account-level intent tracking. Keyword groups, page visitor records, contact-level engagement, account-level intent search.
  2. /api/v1/public/signals/company — a single endpoint that returns an aggregate intent score for one domain. Write-key safe (works from browser code).

Use the public endpoint for quick lookups in a browser; use the server-side intent surface for prospecting / SDR workflows.

30-second start

Get org-level intent stats:

Terminal window
curl 'https://be.graph8.com/api/v1/intent/stats' \
-H "Authorization: Bearer $G8_API_KEY"

Quick reference

EndpointMethodPurpose
/intent/statsGETOrg-level totals (last 30 days)
/intent/keywords/listPOSTList tracked keywords (paginated)
/intent/keywords/create-from-domainPOSTTrack every page on a domain
/intent/keywords/{id}DELETEStop tracking
/intent/keywords/{id}/companiesPOSTCompanies interested in a keyword
/intent/keywords/{id}/contactsPOSTContacts interested in a keyword
/intent/keywords/{id}/urlsPOSTURLs associated with a keyword
/intent/pages-by-domainPOSTTracked pages on a domain
/intent/pages/searchPOSTSearch pages by URL or keyword
/intent/pages/visitorsPOSTVisitors for a single page URL
/intent/pages/contactsPOSTContacts who visited a page
/intent/pages/visitor-countsPOSTAggregate counts for multiple URLs
/intent-search/url-companies (no /api/v1 prefix)POSTCompanies whose users visited a URL
/public/signals/companyGETAggregate intent score for one domain (write-key safe)

Org-level stats

Terminal window
GET /api/v1/intent/stats
{
"data": {
"total_keywords": 42,
"total_pages": 318,
"total_visitors_30d": 12500,
"total_companies_30d": 1240
}
}

Keyword tracking

Create a keyword group from a domain

Terminal window
POST /api/v1/intent/keywords/create-from-domain
Content-Type: application/json
{ "domain": "competitor.com" }

graph8 auto-tracks every public page on the domain. The system periodically re-discovers new pages.

List + delete

Terminal window
POST /api/v1/intent/keywords/list
{ "page": 1, "limit": 25, "search": "pricing" }
DELETE /api/v1/intent/keywords/{keyword_id}

Deleting a keyword stops new tracking. Historical visitor records are retained — they just don’t roll up to the deleted keyword anymore.

Per-keyword data

Terminal window
POST /api/v1/intent/keywords/{keyword_id}/companies
{ "limit": 50, "date_from": "2026-05-01" }
POST /api/v1/intent/keywords/{keyword_id}/contacts
{ "limit": 50 }
POST /api/v1/intent/keywords/{keyword_id}/urls
{ "limit": 50 }

Each returns data keyed appropriately (companies, contacts, pages).

Page-level data

Terminal window
POST /api/v1/intent/pages-by-domain
{ "domain": "example.com", "limit": 50 }
POST /api/v1/intent/pages/search
{ "query": "pricing", "limit": 25 }
POST /api/v1/intent/pages/visitors
{ "url": "https://example.com/pricing", "limit": 50, "date_from": "2026-05-01" }
POST /api/v1/intent/pages/contacts
{ "url": "https://example.com/pricing", "limit": 50 }
POST /api/v1/intent/pages/visitor-counts
{ "urls": ["https://example.com/pricing", "https://example.com/docs"] }

Visitor records include the IP-resolved company, page-view count, first / last seen timestamps.

Terminal window
POST https://be.graph8.com/intent-search/url-companies
Authorization: Bearer $G8_API_KEY
Content-Type: application/json
{ "url": "https://competitor.com/pricing", "date_from": "2026-04-01", "limit": 50 }

Returns companies whose tracked users visited the URL. Useful for “show me everyone shopping our competitor right now” workflows.

Public signal endpoint (write-key safe)

Terminal window
GET /api/v1/public/signals/company?domain=acme.com
Authorization: Bearer pk_<write_key>

Returns an aggregate score { domain, intent: "low|medium|high", score: 0-100, signals: [...] }. Safe to call from browser code with a write key — handy for “is this signed-up user a hot account?” checks.

Credit costs

OperationCredits
Read endpoints (keywords, pages, visitors, stats)Free
Public signal endpointFree
Intent signal processing (background, per inbound event)1 credit per 10 events
Keyword creation / deletionFree

The 1-per-10-events rate is part of the platform-level event-stream pricing — see Pricing.

Errors

StatusCauseFix
401Missing or invalid Authorization: Bearer headerGet a key
402Out of credits (waterfall enrichment, AI generation, voice minutes)Top up in Settings → Billing, or switch to Platform
404Resource ID doesn’t existList first to verify the ID
422Validation error in request bodyInspect error.message + error.field in the response
429Rate limit (5 rps per org)Backoff per Retry-After header. See Rate Limits
5xxgraph8 errorRetry with exponential backoff (5s → 30s → 120s)

The full error envelope shape: { "error": { "code": "...", "message": "...", "field": "...", "request_id": "..." } }. Include the request_id in any support ticket. See Errors for the canonical reference.

See also