GET
https://jmpy.me/api/v1
/
analytics
/
utm
/
:shortUrlId
UTM Analytics
curl --request GET \
  --url https://jmpy.me/api/v1/analytics/utm/:shortUrlId \
  --header 'Authorization: Bearer <token>'
{
  "data": [
    {
      "utm_source": "<string>",
      "utm_medium": "<string>",
      "utm_campaign": "<string>",
      "utm_term": "<string>",
      "utm_content": "<string>",
      "clicks": 123,
      "unique_visitors": 123
    }
  ],
  "total_campaigns": 123
}
Get detailed UTM parameter analytics to track the performance of your marketing campaigns. Analyze traffic by source, medium, campaign, term, and content.
Use all as the shortUrlId to get aggregated UTM analytics across all your short URLs.

Path Parameters

shortUrlId
string
required
Short URL identifier. Accepts:
  • UUID: 550e8400-e29b-41d4-a716-446655440000
  • Short code: abc123
  • Custom alias: my-custom-link
  • all: Get aggregated UTM data for all your URLs

Query Parameters

urlType
string
default:"all"
Filter by URL type when using all: all, standard, branded, subdomain.See Branded Domains and Subdomains for more information.
startDate
string
Start date for filtering (ISO 8601).
endDate
string
End date for filtering (ISO 8601).

Response

data
array
Array of UTM campaign records.
total_campaigns
integer
Total number of unique UTM campaign combinations.

Request Examples

# Get UTM analytics for a specific URL
curl -X GET "https://jmpy.me/api/v1/analytics/utm/550e8400-e29b-41d4-a716-446655440000" \
  -H "Authorization: Bearer YOUR_API_KEY"

# Get UTM analytics for all URLs
curl -X GET "https://jmpy.me/api/v1/analytics/utm/all" \
  -H "Authorization: Bearer YOUR_API_KEY"

# Filter by URL type and date range
curl -X GET "https://jmpy.me/api/v1/analytics/utm/all?urlType=branded&startDate=2024-01-01&endDate=2024-03-31" \
  -H "Authorization: Bearer YOUR_API_KEY"

Response Examples

{
  "success": true,
  "data": {
    "data": [
      {
        "utm_source": "google",
        "utm_medium": "cpc",
        "utm_campaign": "spring_sale_2024",
        "utm_term": "discount shoes",
        "utm_content": "banner_a",
        "clicks": 1234,
        "unique_visitors": 1098
      },
      {
        "utm_source": "facebook",
        "utm_medium": "social",
        "utm_campaign": "spring_sale_2024",
        "utm_term": null,
        "utm_content": "carousel",
        "clicks": 876,
        "unique_visitors": 743
      },
      {
        "utm_source": "newsletter",
        "utm_medium": "email",
        "utm_campaign": "weekly_digest",
        "utm_term": null,
        "utm_content": "header_cta",
        "clicks": 567,
        "unique_visitors": 512
      }
    ],
    "total_campaigns": 15
  }
}

List URLs with UTM Data

Get a list of all short URLs that have UTM tracking data.

Endpoint

GET /analytics/urls-with-utm

Query Parameters

urlType
string
default:"all"
Filter by URL type: all, standard, branded, subdomain.

Request Example

curl -X GET "https://jmpy.me/api/v1/analytics/urls-with-utm?urlType=all" \
  -H "Authorization: Bearer YOUR_API_KEY"

Response Example

{
  "success": true,
  "data": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "short_code": "abc123",
      "short_url": "https://jmpy.me/abc123",
      "name": "Spring Sale Landing Page",
      "original_url": "https://example.com/spring-sale",
      "created_at": "2024-01-15T10:30:00Z",
      "url_type": "standard",
      "branded_domain": null,
      "subdomain": null,
      "custom_alias": null
    },
    {
      "id": "661f9511-f3ac-52e5-b827-557766551111",
      "short_code": "def456",
      "short_url": "https://go.mycompany.com/promo",
      "name": "Product Launch Campaign",
      "original_url": "https://example.com/new-product",
      "created_at": "2024-02-01T14:00:00Z",
      "url_type": "branded",
      "branded_domain": "go.mycompany.com",
      "subdomain": null,
      "custom_alias": "promo"
    }
  ]
}
UTM tracking analytics may be restricted based on your plan. Free plans have limited access to UTM data. Upgrade to Pro or Enterprise for full UTM tracking capabilities.

Use Cases

Compare click-through rates across different campaigns.
async function compareCampaigns() {
  const response = await fetch(
    'https://jmpy.me/api/v1/analytics/utm/all',
    { headers: { 'Authorization': 'Bearer YOUR_API_KEY' } }
  );
  const { data } = await response.json();
  
  // Group by campaign
  const campaigns = {};
  data.data.forEach(record => {
    const name = record.utm_campaign || 'Untagged';
    if (!campaigns[name]) {
      campaigns[name] = { clicks: 0, visitors: 0, sources: new Set() };
    }
    campaigns[name].clicks += record.clicks;
    campaigns[name].visitors += record.unique_visitors;
    campaigns[name].sources.add(record.utm_source);
  });
  
  // Sort and display
  const sorted = Object.entries(campaigns)
    .map(([name, stats]) => ({
      name,
      clicks: stats.clicks,
      visitors: stats.visitors,
      sources: Array.from(stats.sources),
      ctr: ((stats.visitors / stats.clicks) * 100).toFixed(1)
    }))
    .sort((a, b) => b.clicks - a.clicks);
  
  console.table(sorted);
}
Analyze traffic quality by source and medium combinations.
import requests
from collections import defaultdict

def analyze_source_medium():
    response = requests.get(
        'https://jmpy.me/api/v1/analytics/utm/all',
        headers={'Authorization': 'Bearer YOUR_API_KEY'}
    )
    
    records = response.json()['data']['data']
    
    # Group by source/medium combination
    combos = defaultdict(lambda: {'clicks': 0, 'visitors': 0})
    
    for record in records:
        key = f"{record['utm_source'] or 'direct'} / {record['utm_medium'] or 'none'}"
        combos[key]['clicks'] += record['clicks']
        combos[key]['visitors'] += record['unique_visitors']
    
    # Sort by clicks and display
    print("Source/Medium Analysis")
    print("=" * 60)
    
    for key, stats in sorted(combos.items(), key=lambda x: -x[1]['clicks']):
        engagement = stats['visitors'] / stats['clicks'] if stats['clicks'] > 0 else 0
        print(f"\n{key}:")
        print(f"  Clicks: {stats['clicks']}")
        print(f"  Unique Visitors: {stats['visitors']}")
        print(f"  Engagement Rate: {engagement:.1%}")
Compare performance of different content variants using utm_content.
interface ContentVariant {
  content: string;
  clicks: number;
  visitors: number;
  conversion: number;
}

async function analyzeContentVariants(campaignName: string): Promise<ContentVariant[]> {
  const response = await fetch(
    'https://jmpy.me/api/v1/analytics/utm/all',
    { headers: { 'Authorization': 'Bearer YOUR_API_KEY' } }
  );
  const { data } = await response.json();
  
  // Filter to specific campaign and group by content
  const variants: Record<string, ContentVariant> = {};
  
  data.data
    .filter(r => r.utm_campaign === campaignName && r.utm_content)
    .forEach(record => {
      const content = record.utm_content;
      if (!variants[content]) {
        variants[content] = {
          content,
          clicks: 0,
          visitors: 0,
          conversion: 0
        };
      }
      variants[content].clicks += record.clicks;
      variants[content].visitors += record.unique_visitors;
    });
  
  // Calculate conversion rates and sort
  return Object.values(variants)
    .map(v => ({
      ...v,
      conversion: v.clicks > 0 ? (v.visitors / v.clicks) * 100 : 0
    }))
    .sort((a, b) => b.clicks - a.clicks);
}