API Reference
Programmatic access to your leads, products, and scans. Available on Pro and Agency plans.
https://leadsrover.ioAuthentication
All requests require a Bearer token. Create API keys in Settings > API.
curl -H "Authorization: Bearer lr_sk_..." \ https://leadsrover.io/api/v1/leads
Keys have scopes: read (default) for GET requests, and write for mutations. Max 5 keys per account, revokable instantly.
Response format
All responses use a JSON envelope.
Success
{
"data": { ... }
}Error
{
"error": {
"code": "NOT_FOUND",
"message": "Lead not found",
"doc_url": "https://leadsrover.io/docs/api#errors"
}
}Paginated endpoints include a pagination object with total, limit, offset, and hasMore.
Rate limits
Exceeding the limit returns 429 with a RATE_LIMITED error code.
Errors
BAD_REQUESTInvalid parametersUNAUTHORIZEDMissing or invalid API keyFORBIDDENInsufficient scope or planNOT_FOUNDResource not found or not owned by youCONFLICTResource conflict (e.g. scan running)RATE_LIMITEDToo many requestsINTERNAL_ERRORServer error/api/v1/meReturns your account info and current plan.
{
"data": {
"user": {
"id": "abc123",
"name": "Jane Doe",
"email": "jane@example.com",
"timezone": "America/New_York",
"createdAt": "2026-01-15T10:30:00.000Z"
},
"plan": {
"type": "pro",
"status": "active",
"currentPeriodEnd": "2026-04-15T10:30:00.000Z",
"limits": {
"maxProducts": 25,
"scansPerMonth": 2000,
"aiCommentsPerMonth": 1000
}
}
}
}/api/v1/productsLists all your products.
{
"data": [
{
"id": 42,
"name": "Acme CRM",
"url": "https://acme.com",
"pain": "Manual lead tracking is slow",
"solution": "AI-powered CRM for small teams",
"targetUsers": "Solo founders and small sales teams",
"isActive": true,
"createdAt": "2026-02-01T08:00:00.000Z",
"updatedAt": "2026-03-20T14:30:00.000Z"
}
]
}/api/v1/products/:idReturns a single product by ID. Same shape as the list endpoint.
/api/v1/products/:id/scanTrigger an on-demand scan. Requires write scope. Counts toward your scan quota. Scans run asynchronously.
Response (202)
{
"data": {
"productId": 42,
"status": "scanning",
"message": "Scan enqueued successfully"
}
}/api/v1/leadsLists leads across all products with filtering and pagination.
productIdstatusminQualitysincesortorderlimitoffsetExample
curl -H "Authorization: Bearer lr_sk_..." \ "https://leadsrover.io/api/v1/leads?minQuality=70&status=new&limit=10"
Response
{
"data": [
{
"id": 1234,
"productId": 42,
"subreddit": "smallbusiness",
"redditPostId": "t3_abc123",
"title": "Need a CRM that doesn't cost a fortune",
"authorUsername": "startup_jane",
"postUrl": "https://reddit.com/r/smallbusiness/...",
"qualityScore": 85,
"intent": "Looking for affordable CRM for 3-person team",
"upvotes": 12,
"commentCount": 8,
"postedAt": "2026-03-27T14:30:00.000Z",
"discoveredAt": "2026-03-27T15:00:00.000Z",
"status": "new",
"contactedAt": null,
"language": "en"
}
],
"pagination": {
"total": 47,
"limit": 10,
"offset": 0,
"hasMore": true
}
}/api/v1/leads/:idReturns a single lead with its full post content. Same shape as the list endpoint, plus a content field with the full Reddit post body.
/api/v1/leads/:idUpdate a lead's status. Requires write scope.
Request
{
"status": "contacted"
}Response
{
"data": {
"id": 1234,
"status": "contacted"
}
}Valid statuses: new contacted
/api/v1/products/:id/leadsLists leads for a specific product. Same filters as GET /leads except productId.