GET
https://jmpy.me/api/v1
/
qranalytics
/
referrers
Traffic Sources
curl --request GET \
  --url https://jmpy.me/api/v1/qranalytics/referrers \
  --header 'Authorization: Bearer <token>'
{
  "trafficSources": [
    {
      "source": "<string>",
      "scans": 123,
      "uniqueScanners": 123,
      "percentage": 123
    }
  ],
  "referrerDomains": [
    {
      "domain": "<string>",
      "scans": 123,
      "uniqueScanners": 123
    }
  ],
  "totalScans": 123
}
Get traffic source analytics for your QR code scans, including categorized traffic sources and referrer domain breakdown.
This endpoint returns user-level aggregated referrer data across all your QR codes. Traffic sources are automatically categorized (e.g., Social, Search, Direct).

Query Parameters

days
integer
default:30
Number of days to include in analytics (1-365).

Response

trafficSources
array
Traffic sources categorized by type.
referrerDomains
array
Referrer domain breakdown (top 20).
totalScans
integer
Total number of scans with referrer data.
Traffic source analytics may be restricted based on your plan. Users on free plans may have limited access to detailed referrer breakdowns. Upgrade to access full traffic analytics.

Request Examples

# Get traffic source analytics for last 30 days
curl -X GET "https://jmpy.me/api/v1/qranalytics/referrers?days=30" \
  -H "Authorization: Bearer YOUR_API_KEY"

# Get traffic source analytics for last 90 days
curl -X GET "https://jmpy.me/api/v1/qranalytics/referrers?days=90" \
  -H "Authorization: Bearer YOUR_API_KEY"

Response Examples

{
  "success": true,
  "data": {
    "trafficSources": [
      { 
        "source": "Direct", 
        "scans": 1234, 
        "uniqueScanners": 1000, 
        "percentage": 52.6 
      },
      { 
        "source": "Facebook", 
        "scans": 456, 
        "uniqueScanners": 380, 
        "percentage": 19.4 
      },
      { 
        "source": "Twitter/X", 
        "scans": 234, 
        "uniqueScanners": 190, 
        "percentage": 10.0 
      },
      { 
        "source": "Google", 
        "scans": 189, 
        "uniqueScanners": 156, 
        "percentage": 8.1 
      },
      { 
        "source": "WhatsApp", 
        "scans": 120, 
        "uniqueScanners": 98, 
        "percentage": 5.1 
      },
      { 
        "source": "Other", 
        "scans": 112, 
        "uniqueScanners": 90, 
        "percentage": 4.8 
      }
    ],
    "referrerDomains": [
      { "domain": "Direct", "scans": 1234, "uniqueScanners": 1000 },
      { "domain": "facebook.com", "scans": 456, "uniqueScanners": 380 },
      { "domain": "t.co", "scans": 234, "uniqueScanners": 190 },
      { "domain": "google.com", "scans": 189, "uniqueScanners": 156 },
      { "domain": "wa.me", "scans": 120, "uniqueScanners": 98 }
    ],
    "totalScans": 2345
  }
}

Use Cases

Identify which social platforms drive the most QR engagement.
async function analyzeSocialPerformance() {
  const response = await fetch(
    'https://jmpy.me/api/v1/qranalytics/referrers?days=30',
    { headers: { 'Authorization': 'Bearer YOUR_API_KEY' } }
  );
  const { data } = await response.json();
  
  const socialPlatforms = ['Facebook', 'Twitter/X', 'LinkedIn', 'Instagram', 'TikTok'];
  const socialTraffic = data.trafficSources.filter(s => 
    socialPlatforms.includes(s.source)
  );
  
  const totalSocial = socialTraffic.reduce((sum, s) => sum + s.scans, 0);
  
  console.log('Social Media Performance:');
  socialTraffic.forEach(platform => {
    console.log(`  ${platform.source}: ${platform.scans} scans (${platform.percentage}%)`);
  });
  console.log(`\nTotal social scans: ${totalSocial}`);
  console.log(`Social % of traffic: ${(totalSocial / data.totalScans * 100).toFixed(1)}%`);
}
Compare direct scans (QR codes scanned directly) vs referred traffic.
import requests

def analyze_traffic_types():
    response = requests.get(
        'https://jmpy.me/api/v1/qranalytics/referrers?days=30',
        headers={'Authorization': 'Bearer YOUR_API_KEY'}
    )
    
    data = response.json()['data']
    sources = data['trafficSources']
    
    direct = next((s for s in sources if s['source'] == 'Direct'), {'scans': 0})
    referred = sum(s['scans'] for s in sources if s['source'] != 'Direct')
    total = data['totalScans']
    
    print("Traffic Type Analysis:")
    print(f"  Direct scans: {direct['scans']} ({direct['scans']/total*100:.1f}%)")
    print(f"  Referred scans: {referred} ({referred/total*100:.1f}%)")
    
    if direct['scans'] > referred:
        print("\nInsight: Most users scan QR codes directly without any referrer.")
    else:
        print("\nInsight: Most traffic comes from shared links or social media.")
Prepare data for a pie or donut chart visualization.
interface ChartDataPoint {
  label: string;
  value: number;
  percentage: number;
  color: string;
}

async function getTrafficSourceChartData(): Promise<ChartDataPoint[]> {
  const response = await fetch(
    'https://jmpy.me/api/v1/qranalytics/referrers?days=30',
    { headers: { 'Authorization': 'Bearer YOUR_API_KEY' } }
  );
  const { data } = await response.json();
  
  // Color mapping for traffic sources
  const colors: Record<string, string> = {
    'Direct': '#6366f1',
    'Facebook': '#3b5998',
    'Twitter/X': '#1da1f2',
    'LinkedIn': '#0077b5',
    'Instagram': '#e1306c',
    'Google': '#4285f4',
    'Other': '#9ca3af'
  };
  
  return data.trafficSources.map(source => ({
    label: source.source,
    value: source.scans,
    percentage: source.percentage,
    color: colors[source.source] || colors['Other']
  }));
}