Fuse search, developer, product, employment and commerce signals into demand momentum, acceleration, commercial-intent and durability scores.
Production API: https://demandgraph-api.com
Get a free API key · Documentation · Pricing · Status
Free tier: 50 scored topics/month. No card required. Paid plans from $249/month.
Request a key. The token arrives by email; exchange it for the key, which is shown once.
curl -X POST https://demandgraph-api.com/v1/keys \
-H 'content-type: application/json' \
-d '{"email": "you@example.com"}'Then call the API:
curl -X POST https://demandgraph-api.com/v1/scores \
-H "Authorization: Bearer $KEY" \
-H 'content-type: application/json' \
-d '{"topics":[{"topic":"mcp servers","points":[
{"source":"search","at":"2026-06-01T00:00:00Z","value":1200},
{"source":"search","at":"2026-08-01T00:00:00Z","value":4800}]}]}'Every endpoint below has a runnable playground on the documentation page.
| Endpoint | Auth | Description |
|---|---|---|
GET /health |
public | Liveness and deployed version |
GET / |
public | Service index — endpoints, auth and error format |
POST /v1/scores |
API key | Score and rank topics by demand momentum |
POST /v1/demo/score |
public | Public demo — scores one topic without a key |
GET /v1/weights |
public | The default source weights, and why they differ |
POST /v1/checkout |
public | Start a hosted Square checkout for a paid tier |
POST /v1/keys |
public | Request a free sandbox API key (sends a verification email) |
GET /v1/keys |
API key | List your API keys for this API |
POST /v1/keys/claim |
public | Exchange an emailed claim token for the API key |
POST /v1/keys/{id}/revoke |
API key | Revoke one of your API keys |
POST /v1/keys/{id}/rotate |
API key | Replace one of your API keys with a new secret |
GET /v1/usage |
API key | Your consumption and remaining allowance for this period |
GET /v1/subscription |
API key | Your current plan, billing window and available changes (dashboard session required) |
POST /v1/subscription/plan |
API key | Upgrade or downgrade to another plan (dashboard session required) |
POST /v1/subscription/cancel |
API key | Cancel this plan and end metered access (dashboard session required) |
GET /v1/invoices |
API key | Every invoice issued against this account, newest first (dashboard session required) |
GET /v1/payments |
API key | Every payment attempted against this account and how it went (dashboard session required) |
The full machine-readable contract is openapi.json, generated
from the deployed route table rather than maintained by hand. A
Postman collection is included.
Python — sdk/python
from demandgraph import DemandGraph
client = DemandGraph() # reads DEMANDGRAPH_API_KEY
res = client.score([
{"topic": "mcp servers", "points": [
{"source": "search", "at": "2026-06-01T00:00:00Z", "value": 1200},
{"source": "search", "at": "2026-08-01T00:00:00Z", "value": 4800},
{"source": "employment", "at": "2026-06-01T00:00:00Z", "value": 12},
{"source": "employment", "at": "2026-08-01T00:00:00Z", "value": 47},
]},
])
for s in res["scores"]:
# Discard thin reads rather than acting on them.
if s["confidence"] < 50:
continue
print(s["topic"], s["trend"], s["momentum"], "intent", s["commercialIntent"])TypeScript — sdk/typescript
import { DemandGraph } from './demandgraph.js'
const client = new DemandGraph() // reads DEMANDGRAPH_API_KEY
const res = await client.score([
{ topic: 'mcp servers', points: [
{ source: 'search', at: '2026-06-01T00:00:00Z', value: 1200 },
{ source: 'search', at: '2026-08-01T00:00:00Z', value: 4800 },
{ source: 'employment', at: '2026-06-01T00:00:00Z', value: 12 },
{ source: 'employment', at: '2026-08-01T00:00:00Z', value: 47 },
] },
])
for (const s of res.scores) {
if (s.confidence < 50) continue // thin evidence, not a signal
console.log(s.topic, s.trend, s.momentum, 'intent', s.commercialIntent)
}Every failure returns the same shape. Branch on code, which is a stable enum;
message is for humans and may change.
{"error": {"code": "invalid_api_key", "message": "...", "requestId": "0f3c8b12-…"}}requestId appears on every response and in the x-request-id header. Quote it
in any support request.
Open an issue in this repository, or see the contact route at https://demandgraph-api.com/docs.

