People Intel
API

Three on-ramps. Same dossier.

Whichever surface you use — authenticated REST, native MCP tools, or x402 pay-per-call — the response shape is identical. Pick the on-ramp that matches who's calling.

REST

Submit a job over HTTPS.

Use a session cookie (after sign-in) or an API key (Growth+).

POST/api/jobs

Create a judgment job

Returns a job_id immediately. The actual run completes async (≤2 min); poll /api/jobs/{id} or wait on the webhook.

request
{
  "name": "Q2 board prep",
  "kind": "triage",
  "judgments": ["triage", "flight-risk", "warm-intro"],
  "profile_urls": [
    "https://linkedin.com/in/maya-rao",
    "https://linkedin.com/in/jordan-kim"
  ],
  "webhook_url": "https://hooks.acme.dev/people-intel"
}
response
{
  "ok": true,
  "job_id": "8a3f...",
  "profile_count": 2,
  "credits_reserved": 3.0,
  "atomic_reserved": 3000,
  "status": "running"
}
GET/api/jobs/[id]

Status + signed dossier URL

When succeeded, includes a 10-minute signed S3 URL pointing at the dossier JSON.

response
{
  "ok": true,
  "job": {
    "id": "8a3f...",
    "name": "Q2 board prep",
    "status": "succeeded",
    "profile_count": 2,
    "results_count": 2,
    "credits_spent": "3000"
  },
  "preview_url": "https://s3.../dossier.json?X-Amz-..."
}
GET/api/jobs

List recent jobs

50 most recent jobs for the authenticated household.

MCP

Native tools for AI assistants.

Connect Claude, ChatGPT, or any MCP-compatible client to https://people-intel.0p.studio/api/mcp. Auth with Authorization: Bearer pik_live_….

submit_judgment

Start a judgment job

get_job_status

Poll status, get signed URL

list_jobs

Recent jobs for the household

export_csv

Signed CSV download

get_credit_balance

Current credit balance

list_plans

Public: tiers, packs, judgments

whoami

API-key metadata

# Claude / claude-code MCP config
{
  "mcpServers": {
    "people-intel": {
      "url": "https://people-intel.0p.studio/api/mcp",
      "headers": { "Authorization": "Bearer pik_live_..." }
    }
  }
}
x402

Pay per read. No account.

Settle in USDC on Base. First call returns HTTP 402 + the payment requirements; second call (with the settled X-Payment header) returns the dossier.

POST/api/x402/read

Single profile read

$0.25 for one judgment, $0.40 for all five.

request
{
  "profile_url": "https://linkedin.com/in/maya-rao",
  "judgments": ["triage", "flight-risk"]
}
response
{
  "ok": true,
  "payment": { "tx_hash": "0x..", "paid_atomic_usdc": "400000" },
  "dossier": {
    "profile": { /* 22+ fields */ },
    "judgments": [ { "kind": "triage", "score": 91, ... }, ... ]
  }
}
Webhooks

Push instead of poll.

Pass webhook_url on job creation. We POST a single notification on completion.

POST https://your-app.com/people-intel-webhook
{ "job_id": "8a3f...", "status": "succeeded", "results_count": 248 }