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
Short URL identifier. Accepts:
UUID : 550e8400-e29b-41d4-a716-446655440000
Short code : abc123
Custom alias : my-custom-link
Query Parameters
Start date for filtering (ISO 8601).
End date for filtering (ISO 8601).
Predefined date range: last_hour, last_24_hours, last_7_days, last_30_days, last_year, all_time, custom.
Filter by URL type: all, standard, branded, subdomain.
Filter by Campaign UUID or name.
Comma-separated list of tags to filter by.
Filter clicks by country name (e.g. Pakistan, United States).
Filter clicks by ISO country code (e.g. pk, us). Supports alias country_code.
Filter clicks by region name (e.g. Sindh, California).
Filter clicks by city name (e.g. Karachi, New York).
Filter clicks by device type. Options: desktop, mobile, tablet. Supports alias device_type.
Filter clicks by browser (e.g. chrome, firefox, safari).
Filter clicks by OS (e.g. windows, macos, android, ios).
Filter clicks by UTM Source. Supports alias utm_source.
Filter clicks by UTM Medium. Supports alias utm_medium.
Filter clicks by UTM Campaign. Supports alias utm_campaign.
Filter clicks by UTM Term. Supports alias utm_term.
Filter clicks by UTM Content. Supports alias utm_content.
Filter clicks by referrer URL.
Filter clicks by referrer domain (e.g. t.co, facebook.com). Supports alias referrer_domain.
Response
Core engagement metrics. Show Basic Analytics Object
Number of unique visitors.
Applied date filters. Start date (ISO 8601) or null.
End date (ISO 8601) or null.
Request Examples
cURL
Node.js
TypeScript
Python
PHP
Go
Java
# 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"
const fetch = require ( 'node-fetch' );
const shortUrlId = '550e8400-e29b-41d4-a716-446655440000' ;
const response = await fetch (
`https://jmpy.me/api/v1/analytics/complete/ ${ shortUrlId } ` ,
{
headers: { 'Authorization' : 'Bearer YOUR_API_KEY' }
}
);
const data = await response . json ();
// Access different analytics sections
const { basic , utm , geographic , device , clicks } = data . data ;
console . log ( '=== Complete Analytics Summary ===' );
console . log ( `Total Clicks: ${ basic . total_clicks } ` );
console . log ( `Unique Visitors: ${ basic . unique_visitors } ` );
console . log ( `UTM Campaigns: ${ utm . length } ` );
console . log ( `Locations: ${ geographic . length } ` );
console . log ( `Device Types: ${ device . device_types ?. length || 0 } ` );
console . log ( `Click Records: ${ clicks . length } ` );
import axios from 'axios' ;
interface CompleteAnalytics {
basic : {
total_clicks : number ;
unique_visitors : number ;
clicks_by_day : Array <{ date : string ; clicks : number }>;
};
utm : Array <{
utm_source : string ;
utm_medium : string ;
utm_campaign : string ;
clicks : number ;
}>;
geographic : Array <{
country : string ;
city : string ;
clicks : number ;
}>;
device : {
browsers : Array <{ name : string ; clicks : number }>;
device_types : Array <{ type : string ; clicks : number }>;
};
clicks : Array <{
clicked_at : string ;
country : string ;
device_type : string ;
}>;
filters : {
startDate : string | null ;
endDate : string | null ;
};
}
const shortUrlId = '550e8400-e29b-41d4-a716-446655440000' ;
const response = await axios . get <{ success : boolean ; data : CompleteAnalytics }>(
`https://jmpy.me/api/v1/analytics/complete/ ${ shortUrlId } ` ,
{
headers: { 'Authorization' : 'Bearer YOUR_API_KEY' },
params: {
startDate: '2024-01-01' ,
endDate: '2024-03-31'
}
}
);
const analytics = response . data . data ;
console . log ( 'Complete analytics retrieved:' , analytics );
import requests
import json
short_url_id = '550e8400-e29b-41d4-a716-446655440000'
response = requests.get(
f 'https://jmpy.me/api/v1/analytics/complete/ { short_url_id } ' ,
headers = { 'Authorization' : 'Bearer YOUR_API_KEY' },
params = {
'startDate' : '2024-01-01' ,
'endDate' : '2024-03-31'
}
)
analytics = response.json()[ 'data' ]
print ( "=== Complete Analytics Report === \n " )
# Basic metrics
print ( "📊 Basic Metrics:" )
print ( f " Total Clicks: { analytics[ 'basic' ][ 'total_clicks' ] } " )
print ( f " Unique Visitors: { analytics[ 'basic' ][ 'unique_visitors' ] } " )
# Top countries
print ( " \n 🌍 Top Countries:" )
for loc in analytics[ 'geographic' ][: 5 ]:
print ( f " { loc[ 'country' ] } : { loc[ 'clicks' ] } clicks" )
# Device breakdown
print ( " \n 📱 Devices:" )
for device in analytics[ 'device' ].get( 'device_types' , []):
print ( f " { device[ 'type' ] } : { device[ 'clicks' ] } clicks" )
# UTM campaigns
print ( f " \n 🎯 UTM Campaigns: { len (analytics[ 'utm' ]) } " )
<? php
$client = new GuzzleHttp\ Client ();
$shortUrlId = '550e8400-e29b-41d4-a716-446655440000' ;
$response = $client -> request ( 'GET' ,
"https://jmpy.me/api/v1/analytics/complete/{ $shortUrlId }" , [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY'
],
'query' => [
'startDate' => '2024-01-01' ,
'endDate' => '2024-03-31'
]
]);
$analytics = json_decode ( $response -> getBody (), true )[ 'data' ];
echo "=== Complete Analytics === \n\n " ;
echo "Total Clicks: " . $analytics [ 'basic' ][ 'total_clicks' ] . " \n " ;
echo "Unique Visitors: " . $analytics [ 'basic' ][ 'unique_visitors' ] . " \n " ;
echo "UTM Campaigns: " . count ( $analytics [ 'utm' ]) . " \n " ;
echo "Locations Tracked: " . count ( $analytics [ 'geographic' ]) . " \n " ;
?>
package main
import (
" fmt "
" net/http "
" net/url "
" io "
)
func main () {
shortUrlId := "550e8400-e29b-41d4-a716-446655440000"
baseURL := fmt . Sprintf (
"https://jmpy.me/api/v1/analytics/complete/ %s " ,
shortUrlId ,
)
params := url . Values {}
params . Add ( "startDate" , "2024-01-01" )
params . Add ( "endDate" , "2024-03-31" )
req , _ := http . NewRequest ( "GET" , baseURL + "?" + params . Encode (), nil )
req . Header . Add ( "Authorization" , "Bearer YOUR_API_KEY" )
resp , _ := http . DefaultClient . Do ( req )
defer resp . Body . Close ()
body , _ := io . ReadAll ( resp . Body )
fmt . Println ( string ( body ))
}
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.URI;
import java.net.http.HttpResponse;
String shortUrlId = "550e8400-e29b-41d4-a716-446655440000" ;
String url = String . format (
"https://jmpy.me/api/v1/analytics/complete/%s?startDate=2024-01-01&endDate=2024-03-31" ,
shortUrlId
);
HttpClient client = HttpClient . newHttpClient ();
HttpRequest request = HttpRequest . newBuilder ()
. uri ( URI . create (url))
. header ( "Authorization" , "Bearer YOUR_API_KEY" )
. GET ()
. build ();
HttpResponse < String > response = client . send (request,
HttpResponse . BodyHandlers . ofString ());
System . out . println ( response . body ());
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"
}
}
}
{
"success" : false ,
"error" : {
"code" : "NOT_FOUND" ,
"message" : "Short URL not found" ,
"details" : "No short URL found with code or alias: invalid-code"
}
}
Use Cases
Generate a full analytics report
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 ;
}
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