All Systems Operational

Developer Documentation

INTEGRATE LEADS DIRECTLY
INTO YOUR CRM

Connect Leaditio to any CRM, sales tool, or custom workflow using our REST API or webhooks. Leads delivered in real time, every time.

Bearer Token Auth
60 Requests / Minute
JSON Responses
REST + Webhooks

Authentication

All API requests must be authenticated using a Bearer token. Your API key is available in your buyer dashboard under Settings → API Access.

Keep your API key secret. Never expose it in client-side code, public repositories, or frontend JavaScript. Treat it like a password.
HTTP Header
Authorization: Bearer YOUR_API_KEY

Include this header in every request. Keys are tied to your buyer account and inherit your plan's permissions and rate limits.

Base URL
Base URL https://leaditio.com/api/v1
All endpoints are relative to the base URL above. All requests and responses use JSON (Content-Type: application/json).

Rate Limits

To ensure fair usage and system stability, API requests are rate-limited per API key. Exceeding the limit returns a 429 Too Many Requests response.

60
Requests / Minute
5K
Requests / Day
100
Max Page Size

Rate limit headers are returned on every response:

Response Headers
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 54
X-RateLimit-Reset: 1716196800

Error Codes

All errors return a consistent JSON body with a code and human-readable message.

Status Code Description
400 invalid_request Missing or malformed parameters
401 unauthorized Invalid or missing API key
403 forbidden Your plan does not include API access
404 not_found Resource does not exist or does not belong to you
429 rate_limited Too many requests — wait for rate limit reset
500 internal_error Unexpected server error — retry with backoff

List Your Leads

Retrieve a paginated list of leads delivered to your account. Use query parameters to filter by vertical, score tier, location, or date range.

GET /leads Returns paginated list of leads for your account
Query Parameters
ParameterTypeRequiredDescription
vertical string optional Filter by vertical: solar, insurance, financial, property
score_tier string optional Filter by tier: hot, warm, qualified
suburb string optional Filter by suburb name (e.g. Sandton)
date_from string optional ISO 8601 date: 2026-05-01
date_to string optional ISO 8601 date: 2026-05-31
page integer optional Page number, default 1
limit integer optional Results per page, default 25, max 100
Response
JSON Response 200
{
  "leads": [
    {
      "id": "lead_abc123",
      "vertical": "solar",
      "sub_vertical": "installation",
      "first_name": "Thabo",
      "suburb": "Sandton",
      "province": "Gauteng",
      "score_tier": "hot",
      "service_type": "Solar Installation 10kW+",
      "delivered_at": "2026-05-20T10:23:48Z"
    }
  ],
  "total": 142,
  "page": 1,
  "limit": 25
}

Get Single Lead

Retrieve the full detail of a single lead including the quality score breakdown. Only returns leads that were delivered to your account.

GET /leads/:id Returns full lead object with score breakdown
Path Parameters
ParameterTypeRequiredDescription
id string required Lead ID, e.g. lead_abc123
Response
JSON Response 200
{
  "id": "lead_abc123",
  "vertical": "solar",
  "sub_vertical": "installation",
  "first_name": "Thabo",
  "suburb": "Sandton",
  "province": "Gauteng",
  "service_type": "Solar Installation 10kW+",
  "budget_range": "R100,000–R150,000",
  "urgency": "asap",
  "phone": "+27823456789",
  "email": "thabo.m@gmail.com",
  "score": 87,
  "score_tier": "hot",
  "score_breakdown": {
    "phone_valid": 10,
    "email_valid": 8,
    "suburb_match": 8,
    "budget_provided": 10,
    "urgency_high": 12,
    "form_complete": 10,
    "service_specific": 10,
    "real_name": 8,
    "organic_source": 6,
    "intent_score": 5
  },
  "delivered_at": "2026-05-20T10:23:48Z",
  "created_at": "2026-05-20T10:23:44Z"
}

Register a Webhook

Register a webhook URL to receive leads in real time as they are matched to your account. Leaditio will POST the webhook payload to your URL within seconds of a lead qualifying.

POST /leads/webhook Register or update your webhook endpoint
Request Body
FieldTypeRequiredDescription
url string required HTTPS URL that will receive POST requests
secret string required Your secret for HMAC-SHA256 signature verification
events string[] required Array of event types: "lead.new", "lead.updated"
Request Example
JSON Request Body
{
  "url": "https://your-crm.com/hooks/leaditio",
  "secret": "wh_secret_your_secret_here",
  "events": ["lead.new", "lead.updated"]
}
Response
JSON Response 201
{
  "webhook_id": "wh_7f3a2b9c",
  "url": "https://your-crm.com/hooks/leaditio",
  "events": ["lead.new", "lead.updated"],
  "created_at": "2026-05-20T10:00:00Z"
}

Account Statistics

Retrieve high-level statistics for your buyer account including leads received, conversion rate, and your active subscription plan.

GET /account/stats Returns account-level usage statistics
Response
JSON Response 200
{
  "leads_received": 142,
  "leads_converted": 31,
  "conversion_rate": "21.8%",
  "leads_this_month": 38,
  "quota_this_month": 150,
  "active_plan": "pro",
  "plan_renews_at": "2026-06-01T00:00:00Z"
}

Webhook Payload Reference

When a new lead is matched to your account, Leaditio sends an HTTP POST to your registered webhook URL within seconds. The request body is JSON and includes the full lead record.

lead.new — Webhook Payload
{
  "event": "lead.new",
  "timestamp": "2026-05-20T10:23:44Z",
  "lead": {
    "id": "lead_abc123",
    "vertical": "solar",
    "sub_vertical": "installation",
    "first_name": "Thabo",
    "suburb": "Sandton",
    "province": "Gauteng",
    "score": 87,
    "score_tier": "hot",
    "service_type": "Solar Installation 10kW+",
    "budget_range": "R100,000–R150,000",
    "urgency": "asap",
    "delivered_at": "2026-05-20T10:23:48Z"
  },
  "contact": {
    "phone": "+27823456789",
    "email": "thabo.m@gmail.com"
  }
}

Signature Verification

Every webhook request includes an X-Leaditio-Signature header. This is an HMAC-SHA256 hash of the raw request body, signed with your webhook secret. Always verify this to ensure the request is genuine.

Always verify the signature before processing any webhook payload. Failing to do so could allow attackers to inject fake leads into your CRM.
Node.js — Signature Verification
const crypto = require('crypto');

function verifySignature(rawBody, secret, signature) {
  const expected = crypto
    .createHmac('sha256', secret)
    .update(rawBody, 'utf8')
    .digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(expected),
    Buffer.from(signature)
  );
}

Event Types

EventTrigger
lead.new A new lead has been matched and delivered to your account
lead.updated A lead's status or details have been updated (e.g. score recalculated)

Fetching Your Leads

Example code to authenticate and retrieve leads from the Leaditio API in three popular languages.

JavaScript / Node.js
// Fetch leads using the Leaditio REST API
const API_KEY = process.env.LEADITIO_API_KEY;
const BASE_URL = 'https://leaditio.com/api/v1';

async function getLeads({ vertical, scoreTier, page = 1, limit = 25 } = {}) {
  const params = new URLSearchParams({ page, limit });
  if (vertical) params.set('vertical', vertical);
  if (scoreTier) params.set('score_tier', scoreTier);

  const res = await fetch(`${BASE_URL}/leads?${params}`, {
    headers: {
      'Authorization': `Bearer ${API_KEY}`,
      'Content-Type': 'application/json'
    }
  });

  if (!res.ok) {
    const err = await res.json();
    throw new Error(err.message);
  }

  return res.json(); // { leads, total, page, limit }
}

// Usage
getLeads({ vertical: 'solar', scoreTier: 'hot' })
  .then(data => console.log(data.leads))
  .catch(console.error);
Python
# pip install requests
import os
import requests

API_KEY = os.environ['LEADITIO_API_KEY']
BASE_URL = 'https://leaditio.com/api/v1'

def get_leads(vertical=None, score_tier=None, page=1, limit=25):
    headers = {
        'Authorization': f'Bearer {API_KEY}',
        'Content-Type': 'application/json'
    }
    params = {'page': page, 'limit': limit}
    if vertical:
        params['vertical'] = vertical
    if score_tier:
        params['score_tier'] = score_tier

    response = requests.get(
        f'{BASE_URL}/leads',
        headers=headers,
        params=params
    )
    response.raise_for_status()
    return response.json()  # { leads, total, page, limit }

# Usage
data = get_leads(vertical='solar', score_tier='hot')
for lead in data['leads']:
    print(lead['id'], lead['suburb'], lead['score_tier'])
cURL
# List all hot solar leads
curl -X GET "https://leaditio.com/api/v1/leads?vertical=solar&score_tier=hot&page=1&limit=25" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json"

# Get a specific lead
curl -X GET "https://leaditio.com/api/v1/leads/lead_abc123" \
  -H "Authorization: Bearer YOUR_API_KEY"

# Register a webhook
curl -X POST "https://leaditio.com/api/v1/leads/webhook" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://your-crm.com/hooks/leaditio","secret":"your_secret","events":["lead.new","lead.updated"]}'

# Get account stats
curl -X GET "https://leaditio.com/api/v1/account/stats" \
  -H "Authorization: Bearer YOUR_API_KEY"

CRM Integrations

Connect Leaditio to your existing sales stack. Native integrations and webhook-based flows are available for all major CRM platforms used in South Africa.

Salesforce
Webhook → Flow Builder
🔄
HubSpot
Webhook → Workflows
📈
Zoho CRM
REST API / Webhook
🔎
Pipedrive
Webhook → Deals API
📋
Google Sheets
Zapier Webhook
🔧
Custom Webhook
Any HTTPS endpoint
Need a custom integration? Our team can assist with bespoke CRM connectors for enterprise clients. Contact us to discuss requirements.

READY TO AUTOMATE YOUR LEAD FLOW?

Request API access from your buyer dashboard and start receiving leads directly in your CRM within minutes.