API Reference

RESTful API. Bearer token auth. JSON responses. All endpoints return in under 3 seconds.

GET/api/v1/score
POST/api/v1/score/bulk
GET/api/v1/watchlist
POST/api/v1/watchlist
GET/api/v1/prioritize
01 · Auth

Authentication

All requests require a Bearer token in the Authorization header. Generate keys from the API Keys page in your dashboard.

GET/api/v1/score
Request
curl https://intentiq.com/api/v1/score \
  -G -d domain=stripe.com \
  -H "Authorization: Bearer iq_live_sk_••••••••••••••••"

# Key format:  iq_live_sk_<32 hex chars>
# Key scope:   read — all GET endpoints
#              write — GET + bulk + watchlist mutations

Header

Authorization

Scheme

Bearer

Key prefix

iq_live_sk_

Revoke

Dashboard → API Keys

02 · Core

Score a Domain

Returns a composite 0–100 intent score for any company domain, with signal breakdown and AI-generated reasoning.

Query Parameters

domainrequiredstringCompany domain to score (e.g. stripe.com)
include_signalsbooleanInclude per-signal breakdown in response. Default: true
include_talk_trackbooleanInclude AI-generated talk track. Default: false
include_email_subjectbooleanInclude suggested email subject line. Default: false
GET/api/v1/score
Request
curl https://intentiq.com/api/v1/score \
  -G \
  -d domain=stripe.com \
  -d include_signals=true \
  -d include_talk_track=true \
  -H "Authorization: Bearer iq_live_sk_••••"

# JavaScript
const res = await fetch(
  '/api/v1/score?domain=stripe.com',
  { headers: { Authorization: 'Bearer iq_live_sk_••••' } }
);
const data = await res.json();

# Python
import requests
data = requests.get(
  'https://intentiq.com/api/v1/score',
  params={'domain': 'stripe.com'},
  headers={'Authorization': 'Bearer iq_live_sk_••••'}
).json()

Method

GET

Credits

1 per call

Cache

24h TTL

200OK · 1.24s
Response
{
"company": "Stripe, Inc.",
"domain": "stripe.com",
"intent_score": 91,
"score_band": "HOT",
"buying_stage": "active-evaluation",
"urgency": "act-now",
"ai_summary": "Raised $600M 3 weeks ago, hiring aggressively...",
"why_now": "Series I closed 21 days ago. Hiring +40% MoM.",
"key_triggers": [
"$600M Series I",
"47 open eng roles",
"Checkout SDK launch"
,
"recommended_action": "Lead with ROI on conversion rates.",
"email_subject": "Quick question about Stripe's infra scale",
"signals": {
"funding"25/25 "hiring"18/20
"news"16/20 "technology"17/20
"web"15/15
}
"score_decay_date": "2026-04-07T00:00:00.000Z"
}

Score

91 / 100

Band

HOT

Latency

~1.2s

03 · Bulk

Bulk Scoring

Submit up to 1,000 domains at once. Credits are deducted upfront. Results are downloadable as CSV once the job completes.

POST/api/v1/score/bulk
Request
curl https://intentiq.com/api/v1/score/bulk \
  -X POST \
  -H "Authorization: Bearer iq_live_sk_••••" \
  -F "file=@companies.csv"

# CSV format:
# company_name,domain
# Stripe,stripe.com
# Notion,notion.so
# Linear,linear.app

# Max: 1,000 rows per job
# Max concurrent jobs: 3
202Accepted
Response
{
"job_id": "bulk_01JMXPQ7",
"status": "queued",
"count": 3,
"credits_deducted": 3,
"poll_url": "/api/v1/score/bulk/bulk_01JMXPQ7"
}

Poll the poll_url until status: "done", then download the result CSV.

04 · Watchlist

Watchlist

Monitor companies over time. Scores are refreshed periodically. HOT leads (≥75) surface to the top of your dashboard.

POST/api/v1/watchlist
Add to watchlist
curl https://intentiq.com/api/v1/watchlist \
  -X POST \
  -H "Authorization: Bearer iq_live_sk_••••" \
  -H "Content-Type: application/json" \
  -d '{
    "domain": "stripe.com",
    "company_name": "Stripe"
  }'
GET/api/v1/watchlist
List watchlist
curl https://intentiq.com/api/v1/watchlist \
  -H "Authorization: Bearer iq_live_sk_••••"

# Returns array sorted by score desc
# Filter by band:
  ?band=HOT
  ?band=WARM
05 · Errors

Error Codes

All errors return a JSON body with an error field. HTTP status codes follow REST conventions.

HTTP Status Codes

400Bad RequestMissing or invalid domain parameter.
401UnauthorizedMissing, invalid, or revoked API key.
402Payment RequiredInsufficient credits. Top up to continue.
429Too Many RequestsRate limit exceeded (60 req/min). Retry after 1 minute.
500Server ErrorUnexpected error. Try again or contact support.
402Payment Required
Error response
{
"error": "Insufficient credits. Please top up your account.",
"code": "insufficient_credits"
}
06 · Limits

Rate Limits

Limits apply per API key. Bulk jobs count as 1 request against the rate limit regardless of company count.

Score requests

60 / min

Bulk jobs

3 concurrent

Bulk max rows

1,000 / job

Watchlist limit

Plan-dependent

Rate limit headers are returned on every response:X-RateLimit-Limit: 60 X-RateLimit-Remaining: 58 X-RateLimit-Reset: 1741392060

Ready to integrate?

Get your API key in 30 seconds. 20 free credits included.