GET
https://jmpy.me/api/v1
/
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).

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")