API reference

Public endpoints.

Three of our endpoints are public and unauthenticated by design — they exist so anyone can independently verify the integrity of any delivery. The rest of the API is buyer-scoped behind a session cookie or signed download token.

GET /api/audit/[lead_id]

Returns the public exclusivity record for a lead. No authentication. The buyer ID is hashed before exposure so the public never learns who received the lead.

curl https://merchantsourced.com/api/audit/ms_lead_8f3a2c

200 {
  "lead_id": "ms_lead_8f3a2c",
  "exclusivity": "exclusive",
  "status": "delivered",
  "captured_at": "2026-04-29T13:55:42Z",
  "max_delivery_count": 1,
  "delivered_to_count": 1,
  "deliveries": [{
    "delivery_id": "ms_dlv_a01",
    "buyer_hash": "9f41c6d2a0b87e1c",
    "delivered_at": "2026-04-29T14:02:11.293Z",
    "bid_won_cents": 12500,
    "signature": "ad42f1c8...",
    "status": "delivered"
  }],
  "attempts_to_others": 0
}

POST /api/audit/verify

Submit a receipt payload and signature. We HMAC the payload with our signing secret and timing-safe-compare. We also check the row against our delivery ledger.

curl -X POST https://merchantsourced.com/api/audit/verify \
  -H "content-type: application/json" \
  -d '{
    "lead_id":      "ms_lead_8f3a2c",
    "buyer_id":     "ms_buyer_demo01",
    "delivered_at": "2026-04-29T14:02:11.293Z",
    "exclusivity":  "exclusive",
    "signature":    "ad42f1c8..."
  }'

200 { "valid": true, "matches_record": true }

GET /api/audit/sample

Returns a freshly-signed sample receipt for our public demo lead. Useful for testing your own verifier integration locally.

curl https://merchantsourced.com/api/audit/sample

200 {
  "lead_id": "ms_lead_seed01",
  "buyer_id": "ms_buyer_demo01",
  "delivered_at": "2026-04-29T14:02:11.293Z",
  "exclusivity": "exclusive",
  "signature": "ad42f1c8..."
}

POST /api/v1/leads/intake

Affiliate revshare endpoint. Submit a lead with consent metadata and we credit your affiliate account a configurable percentage of every sale. Apply for an affiliate account.

curl -X POST https://merchantsourced.com/api/v1/leads/intake \
  -H "x-affiliate-key: aff_..." \
  -H "content-type: application/json" \
  -d '{
    "first_name": "Jane",
    "last_name": "Doe",
    "business_name": "Doe Trucking LLC",
    "phone": "5555550101",
    "email": "jane@example.com",
    "monthly_revenue": 80000,
    "fico": 670,
    "consent": true,
    "consent_text": "By submitting...",
    "consent_ip": "203.0.113.42",
    "source_url": "https://your-landing.example/quote"
  }'

201 { "lead_id": "ms_lead_8f3a2c", "quality_tier": "B", "credit_pending_cents": 1500 }

Webhook delivery format

When a lead matches a buyer's filter, we POST to the buyer's configured webhook URL. The buyer has 60 seconds to respond 200 or we move on to the next bidder.

POST https://your-crm.example/webhook
content-type: application/json
x-merchantsource-signature: ad42f1c8...

{
  "type": "lead.delivered",
  "delivery_id": "ms_dlv_...",
  "delivered_at": "2026-04-29T14:02:11.293Z",
  "exclusivity": "exclusive",
  "lead": {
    "first_name": "Jane",
    "last_name": "Doe",
    "business_name": "Doe Trucking LLC",
    "phone": "5555550101",
    "email": "jane@example.com",
    "industry": "Trucking",
    "business_address_state": "FL",
    "monthly_revenue": 80000,
    "fico": 670,
    "lead_quality_tier": "A"
  },
  "receipt": {
    "lead_id": "ms_lead_8f3a2c",
    "buyer_id": "ms_buyer_demo01",
    "signature": "ad42f1c8...",
    "verify_url": "https://merchantsourced.com/audit/ms_lead_8f3a2c"
  }
}