Offer Campaign APIs
Source List API
GET
https://api.pingtree.com/api/source-list/{org-id}/{cid}Overview#
The Source List API returns performance and statistical data for all lead sources attached to a specific offer campaign. Use it to build reporting dashboards, monitor source-level metrics (leads, conversions, revenue), and identify top-performing or underperforming sources in real time.
Endpoint#
GET /api/source-list/{org-id}/{cid}| Segment | Description |
|---|---|
{org-id} | Your organization (advertiser) unique ID |
{cid} | The campaign unique ID |
Authentication#
Include your API token in the Authorization header:
Authorization: Bearer <your-api-token>Request Parameters#
Path Parameters#
| Parameter | Type | Required | Description |
|---|---|---|---|
org-id | string | Yes | Organization unique ID |
cid | string | Yes | Campaign unique ID |
Query Parameters#
| Parameter | Type | Required | Description |
|---|---|---|---|
from | string | No | Start date filter (ISO 8601: YYYY-MM-DD) |
to | string | No | End date filter (ISO 8601: YYYY-MM-DD) |
search | string | No | Search by source name |
page | integer | No | Page number (default: 1) |
limit | integer | No | Records per page (default: 10, max: 100) |
Example Request#
Bash
curl -G "https://api.pingtree.com/api/source-list/org_5f1a2b3c/cmp_9z8y7x6w" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
--data-urlencode "from=2025-08-01" \
--data-urlencode "to=2025-08-31"Example Response#
JSON
{
"status": 200,
"message": "Source list retrieved successfully",
"data": {
"sources": [
{
"sourceUniqueId": "src_abc123",
"sourceName": "Google Display - Debt",
"totalLeads": 1240,
"acceptedLeads": 980,
"rejectedLeads": 180,
"duplicateLeads": 80,
"totalConversions": 120,
"totalRevenue": 4800.00,
"totalPayout": 3600.00,
"margin": 1200.00,
"status": "active"
},
{
"sourceUniqueId": "src_def456",
"sourceName": "Facebook Leads - Debt",
"totalLeads": 540,
"acceptedLeads": 430,
"rejectedLeads": 70,
"duplicateLeads": 40,
"totalConversions": 55,
"totalRevenue": 2200.00,
"totalPayout": 1760.00,
"margin": 440.00,
"status": "active"
}
],
"totalRecord": 2,
"page": 1,
"limit": 10
}
}Error — Campaign Not Found#
JSON
{
"status": 400,
"message": "Campaign not found or access denied"
}Error — Unauthorized#
JSON
{
"status": 401,
"message": "Unauthorized"
}Status Codes#
| HTTP Code | Description |
|---|---|
| 200 | Source list returned successfully |
| 400 | Invalid campaign ID, org ID, or query parameters |
| 401 | Invalid or missing API token |
| 500 | Internal server error |
Tips#
- Date range filtering: Use
fromandtoto scope the stats to a reporting period. All metrics (leads, conversions, revenue) are calculated within the specified window. - Monitoring performance: Poll this endpoint periodically (e.g. every 15 minutes) to refresh a live performance dashboard for your campaign sources.
- Revenue vs payout:
totalRevenueis what buyers paid;totalPayoutis what sources were paid. The difference (margin) represents your campaign's gross profit for that source. - Inactive sources: Sources with
status: "inactive"are included in the response for historical reference but are not currently receiving leads.