Public API · v1
Pitchdar API reference
Score any business from one POST. List your own scored leads. Register outbound webhooks so your stack reacts when a hot prospect crosses your fit threshold. JSON over HTTPS, bearer-token auth, no SDK required.
Authentication
Every request must send Authorization: Bearer pk_live_… with an org-scoped API key. Create one at /app/settings/api-keys. The full secret is shown once on creation. Keys are tied to one workspace and never expire — revoke them when a contractor leaves.
- Scope
read_write: all endpoints. - Scope
read:GET /leadsandGET /webhooksonly.
Rate limits vary by plan: Trial 60/min, Starter 120/min, Pro 600/min, Agency 1,200/min. Exceeded calls return 429 + Retry-After.
POST /api/v1/score
Score a business 1-100 for fit. Use the niche slug from /leads for best results. Setting offer sharpens the pitch angle.
curl -X POST https://www.pitchdar.com/api/v1/score \
-H "Authorization: Bearer $PITCHDAR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"businessName": "Bondi Brew Coffee Bar",
"address": "Sydney NSW 2026",
"niche": "cafe",
"rating": 4.6,
"reviewCount": 412,
"website": "https://bondibrew.example",
"offer": "Direct ordering site to bypass UberEats"
}'200 response:
{
"fitScore": 88,
"pitchAngle": "Add 1-click ordering on existing site",
"topPains": ["No native ordering", "High Uber commission", "Slow site on mobile"],
"source": "claude"
}If fitScore >= 80, the org's registered webhooks receive a lead.scored.high event.
GET /api/v1/leads
Paginated list of the org's leads. Filter by minScore or status; paginate via cursor.
curl https://www.pitchdar.com/api/v1/leads?minScore=80&limit=20 \
-H "Authorization: Bearer $PITCHDAR_API_KEY"{
"data": [
{
"id": "ld_…",
"name": "Bondi Brew Coffee Bar",
"category": "cafe",
"city": "Sydney",
"country": "AU",
"website": "https://…",
"email": "owner@…",
"phone": "+61…",
"rating": 4.6,
"reviewCount": 412,
"fitScore": 88,
"status": "new",
"createdAt": "2026-06-05T22:00:00.000Z"
}
],
"nextCursor": "1748131200000"
}POST /api/v1/webhooks
Register an outbound HTTPS endpoint. The signing secret is returned once.
curl -X POST https://www.pitchdar.com/api/v1/webhooks \
-H "Authorization: Bearer $PITCHDAR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://api.your-app.com/pitchdar",
"events": ["lead.scored.high"],
"description": "Production CRM sync"
}'{
"id": "wh_…",
"url": "https://api.your-app.com/pitchdar",
"secret": "whsec_…",
"events": ["lead.scored.high"],
"signingHeader": "X-Pitchdar-Signature",
"signingScheme": "t=<unix-seconds>,v1=<hex sha256 of `<ts>.<body>`>"
}Verify signatures by computing HMAC_SHA256(secret, "<t>.<body>") and comparing in constant time. Reject deliveries whose timestamp is > 5 minutes off your clock.
Events
lead.scored.high— fires fromPOST /scorewhen fitScore ≥ 80.lead.created— when a lead is added to the workspace from any source.subscription.created/subscription.canceled— billing lifecycle.test.ping— manual test from the dashboard.
Errors
400{ "error": "invalid_json" }401{ "error": "missing_or_invalid_api_key" }403{ "error": "plan_lacks_api_access" }— upgrade to Pro+403{ "error": "key_scope_insufficient" }— write op with read scope429{ "error": "rate_limit_exceeded" }— back off perRetry-After500{ "error": "internal_error" }
Need a Zapier or HubSpot template?
Email api@pitchdar.com with what you want to build. We'll ship sample code (and often, a published Zap template) within 24h.