GET
/
analytics
/
complete
/
:shortUrlId
Complete Analytics
curl --request GET \
  --url https://jmpy.me/api/v1/analytics/complete/:shortUrlId \
  --header 'Authorization: Bearer <token>'
{
  "basic": {
    "total_clicks": 123,
    "unique_visitors": 123,
    "clicks_by_day": [
      {}
    ]
  },
  "utm": [
    {}
  ],
  "geographic": [
    {}
  ],
  "device": {},
  "clicks": [
    {}
  ],
  "filters": {
    "startDate": "<string>",
    "endDate": "<string>"
  }
}
Get comprehensive analytics data including basic metrics, UTM tracking, geographic distribution, device breakdown, and individual click details in one API call.
This endpoint combines data from multiple analytics sources. For large volumes of data, consider using individual endpoints for better performance.

Path Parameters

shortUrlId
string
required
Short URL identifier. Accepts:
  • UUID: 550e8400-e29b-41d4-a716-446655440000
  • Short code: abc123
  • Custom alias: my-custom-link

Query Parameters

startDate
string
Start date for filtering (ISO 8601).
endDate
string
End date for filtering (ISO 8601).
dateRange
string
default:"all_time"
Predefined date range: last_hour, last_24_hours, last_7_days, last_30_days, last_year, all_time, custom.
urlType
string
default:"all"
Filter by URL type: all, standard, branded, subdomain.
campaignId
string
Filter by Campaign UUID or name.
tags
string
Comma-separated list of tags to filter by.
country
string
Filter clicks by country name (e.g. Pakistan, United States).
countryCode
string
Filter clicks by ISO country code (e.g. pk, us). Supports alias country_code.
region
string
Filter clicks by region name (e.g. Sindh, California).
city
string
Filter clicks by city name (e.g. Karachi, New York).
deviceType
string
Filter clicks by device type. Options: desktop, mobile, tablet. Supports alias device_type.
browser
string
Filter clicks by browser (e.g. chrome, firefox, safari).
os
string
Filter clicks by OS (e.g. windows, macos, android, ios).
utmSource
string
Filter clicks by UTM Source. Supports alias utm_source.
utmMedium
string
Filter clicks by UTM Medium. Supports alias utm_medium.
utmCampaign
string
Filter clicks by UTM Campaign. Supports alias utm_campaign.
utmTerm
string
Filter clicks by UTM Term. Supports alias utm_term.
utmContent
string
Filter clicks by UTM Content. Supports alias utm_content.
referrer
string
Filter clicks by referrer URL.
referrerDomain
string
Filter clicks by referrer domain (e.g. t.co, facebook.com). Supports alias referrer_domain.

Response

basic
object
Core engagement metrics.
utm
array
UTM campaign tracking data. See UTM Analytics for details.
geographic
array
Geographic distribution data. See Location Analytics for details.
device
object
Device and browser breakdown. See Device Analytics for details.
clicks
array
Individual click records. See Click Details for details.
filters
object
Applied date filters.

Request Examples

# Get complete analytics by UUID
curl -X GET "https://jmpy.me/api/v1/analytics/complete/550e8400-e29b-41d4-a716-446655440000" \
  -H "Authorization: Bearer YOUR_API_KEY"

# Get complete analytics with date filter
curl -X GET "https://jmpy.me/api/v1/analytics/complete/abc123?startDate=2024-01-01&endDate=2024-03-31" \
  -H "Authorization: Bearer YOUR_API_KEY"

# Get complete analytics by custom alias
curl -X GET "https://jmpy.me/api/v1/analytics/complete/my-promo-link" \
  -H "Authorization: Bearer YOUR_API_KEY"

Response Examples

{
  "success": true,
  "data": {
    "basic": {
      "total_clicks": 4523,
      "unique_visitors": 3890,
      "clicks_by_day": [
        { "date": "2024-01-15", "clicks": 234 },
        { "date": "2024-01-16", "clicks": 289 },
        { "date": "2024-01-17", "clicks": 312 }
      ]
    },
    "utm": [
      {
        "utm_source": "google",
        "utm_medium": "cpc",
        "utm_campaign": "spring_sale",
        "clicks": 1234,
        "unique_visitors": 1098
      },
      {
        "utm_source": "facebook",
        "utm_medium": "social",
        "utm_campaign": "spring_sale",
        "clicks": 567,
        "unique_visitors": 489
      }
    ],
    "geographic": [
      {
        "country": "United States",
        "country_code": "US",
        "city": "New York",
        "clicks": 534,
        "percentage": 11.8
      },
      {
        "country": "United Kingdom",
        "country_code": "GB",
        "city": "London",
        "clicks": 423,
        "percentage": 9.4
      }
    ],
    "device": {
      "browsers": [
        { "name": "Chrome", "clicks": 2345, "percentage": 51.8 },
        { "name": "Safari", "clicks": 1234, "percentage": 27.3 }
      ],
      "operating_systems": [
        { "name": "iOS", "clicks": 1890, "percentage": 41.8 },
        { "name": "Android", "clicks": 1234, "percentage": 27.3 }
      ],
      "device_types": [
        { "type": "Mobile", "clicks": 2654, "percentage": 58.7 },
        { "type": "Desktop", "clicks": 1569, "percentage": 34.7 }
      ]
    },
    "clicks": [
      {
        "id": "click-uuid-1",
        "clicked_at": "2024-01-15T14:32:00Z",
        "country": "US",
        "city": "New York",
        "device_type": "mobile",
        "browser": "Safari",
        "referrer": "https://twitter.com"
      }
    ],
    "filters": {
      "startDate": "2024-01-01T00:00:00.000Z",
      "endDate": "2024-03-31T00:00:00.000Z"
    }
  }
}

Use Cases

Create a comprehensive PDF or HTML report from all analytics data.
async function generateFullReport(shortUrlId) {
  const response = await fetch(
    `https://jmpy.me/api/v1/analytics/complete/${shortUrlId}`,
    { headers: { 'Authorization': 'Bearer YOUR_API_KEY' } }
  );
  const { data } = await response.json();
  
  const report = {
    generatedAt: new Date().toISOString(),
    summary: {
      totalClicks: data.basic.total_clicks,
      uniqueVisitors: data.basic.unique_visitors,
      conversionRate: ((data.basic.unique_visitors / data.basic.total_clicks) * 100).toFixed(2) + '%'
    },
    topCountries: data.geographic.slice(0, 10),
    topBrowsers: data.device.browsers.slice(0, 5),
    deviceBreakdown: data.device.device_types,
    campaignPerformance: data.utm.map(u => ({
      campaign: u.utm_campaign,
      source: u.utm_source,
      clicks: u.clicks
    })),
    recentClicks: data.clicks.slice(0, 20)
  };
  
  return report;
}
Populate a single dashboard widget with key metrics.
interface DashboardWidget {
  clicks: number;
  visitors: number;
  topCountry: string;
  topDevice: string;
  activeCampaigns: number;
  trend: Array<{ date: string; clicks: number }>;
}

async function getDashboardWidgetData(shortUrlId: string): Promise<DashboardWidget> {
  const response = await fetch(
    `https://jmpy.me/api/v1/analytics/complete/${shortUrlId}`,
    { headers: { 'Authorization': 'Bearer YOUR_API_KEY' } }
  );
  const { data } = await response.json();
  
  return {
    clicks: data.basic.total_clicks,
    visitors: data.basic.unique_visitors,
    topCountry: data.geographic[0]?.country || 'N/A',
    topDevice: data.device.device_types[0]?.type || 'N/A',
    activeCampaigns: new Set(data.utm.map(u => u.utm_campaign)).size,
    trend: data.basic.clicks_by_day.slice(-7) // Last 7 days
  };
}
Prepare analytics data for export to a data warehouse.
import requests
import json
from datetime import datetime

def export_to_warehouse(short_url_id, warehouse_client):
    response = requests.get(
        f'https://jmpy.me/api/v1/analytics/complete/{short_url_id}',
        headers={'Authorization': 'Bearer YOUR_API_KEY'}
    )
    
    analytics = response.json()['data']
    export_timestamp = datetime.utcnow().isoformat()
    
    # Prepare records for each table
    
    # Clicks table
    click_records = [{
        'short_url_id': short_url_id,
        'export_timestamp': export_timestamp,
        **click
    } for click in analytics['clicks']]
    
    # Geographic summary table
    geo_records = [{
        'short_url_id': short_url_id,
        'export_timestamp': export_timestamp,
        **loc
    } for loc in analytics['geographic']]
    
    # UTM campaigns table
    utm_records = [{
        'short_url_id': short_url_id,
        'export_timestamp': export_timestamp,
        **utm
    } for utm in analytics['utm']]
    
    # Insert into warehouse
    warehouse_client.insert('clicks', click_records)
    warehouse_client.insert('geographic_analytics', geo_records)
    warehouse_client.insert('utm_campaigns', utm_records)
    
    print(f"Exported {len(click_records)} clicks, {len(geo_records)} locations, {len(utm_records)} campaigns")

Analytics Overview

Get aggregated statistics for all URLs

Click Details

Get detailed click records only

Device Analytics

Get device breakdown only

Location Analytics

Get geographic data only