Top Performing URLs
curl --request GET \
--url https://jmpy.me/api/v1/analytics/top-performing-urls \
--header 'Authorization: Bearer <token>'{
"urls": [
{
"id": "<string>",
"short_code": "<string>",
"short_url": "<string>",
"name": "<string>",
"original_url": "<string>",
"click_count": 123,
"unique_visitors": 123,
"created_at": "<string>",
"url_type": "<string>",
"branded_domain": "<string>",
"subdomain": "<string>"
}
],
"pagination": {
"page": 123,
"limit": 123,
"totalPages": 123,
"totalItems": 123
}
}Short URL Analytics
Top Performing URLs
Get your best performing short URLs ranked by clicks
GET
/
analytics
/
top-performing-urls
Top Performing URLs
curl --request GET \
--url https://jmpy.me/api/v1/analytics/top-performing-urls \
--header 'Authorization: Bearer <token>'{
"urls": [
{
"id": "<string>",
"short_code": "<string>",
"short_url": "<string>",
"name": "<string>",
"original_url": "<string>",
"click_count": 123,
"unique_visitors": 123,
"created_at": "<string>",
"url_type": "<string>",
"branded_domain": "<string>",
"subdomain": "<string>"
}
],
"pagination": {
"page": 123,
"limit": 123,
"totalPages": 123,
"totalItems": 123
}
}Get a ranked list of your top performing short URLs with pagination, filtering, and sorting options. Perfect for identifying your most successful links.
Query Parameters
Maximum number of URLs to return (1-100).
Page number for pagination.
Number of records to skip. Overrides
page if provided.Number of days to include in analytics.
Predefined date range:
7d, 30d, 90d, 1y, all_time, custom.
Takes precedence over days if specified.Start date for custom range (ISO 8601). Required when
dateRange is custom.End date for custom range (ISO 8601). Required when
dateRange is custom.Search term to filter by URL name or short code.
Filter by URL type:
all, standard, branded, subdomain.See Branded Domains and Subdomains for more information.Sort field:
clicks, name, created_at.Sort direction:
asc or desc.Response
Array of top performing URLs.
Show URL Object
Show URL Object
Unique identifier (UUID).
The short code.
Full short URL.
Display name for the URL.
Destination URL.
Total clicks.
Number of unique visitors.
Creation timestamp (ISO 8601).
Type:
standard, branded, or subdomain.Branded domain if applicable.
Subdomain if applicable.
Request Examples
- cURL
- Node.js
- TypeScript
- Python
- PHP
- Go
- Java
# Get top 10 performing URLs
curl -X GET "https://jmpy.me/api/v1/analytics/top-performing-urls?limit=10" \
-H "Authorization: Bearer YOUR_API_KEY"
# Get top branded URLs
curl -X GET "https://jmpy.me/api/v1/analytics/top-performing-urls?urlType=branded&limit=20" \
-H "Authorization: Bearer YOUR_API_KEY"
# Search and paginate
curl -X GET "https://jmpy.me/api/v1/analytics/top-performing-urls?search=promo&page=1&limit=10" \
-H "Authorization: Bearer YOUR_API_KEY"
# Custom date range
curl -X GET "https://jmpy.me/api/v1/analytics/top-performing-urls?dateRange=custom&startDate=2024-01-01&endDate=2024-03-31" \
-H "Authorization: Bearer YOUR_API_KEY"
const fetch = require('node-fetch');
const params = new URLSearchParams({
limit: 10,
dateRange: '30d',
urlType: 'all',
sortBy: 'clicks',
sortOrder: 'desc'
});
const response = await fetch(
`https://jmpy.me/api/v1/analytics/top-performing-urls?${params}`,
{
headers: { 'Authorization': 'Bearer YOUR_API_KEY' }
}
);
const data = await response.json();
console.log('🏆 Top Performing URLs:');
data.data.urls.forEach((url, i) => {
console.log(`${i + 1}. ${url.name || url.short_code}: ${url.click_count} clicks`);
});
import axios from 'axios';
interface TopURL {
id: string;
short_code: string;
short_url: string;
name: string;
original_url: string;
click_count: number;
unique_visitors: number;
created_at: string;
url_type: 'standard' | 'branded' | 'subdomain';
}
interface TopURLsResponse {
urls: TopURL[];
pagination: {
page: number;
limit: number;
totalPages: number;
totalItems: number;
};
}
const response = await axios.get<{ success: boolean; data: TopURLsResponse }>(
'https://jmpy.me/api/v1/analytics/top-performing-urls',
{
headers: { 'Authorization': 'Bearer YOUR_API_KEY' },
params: {
limit: 20,
dateRange: '30d',
sortBy: 'clicks',
sortOrder: 'desc'
}
}
);
const { urls, pagination } = response.data.data;
console.log(`Showing ${urls.length} of ${pagination.totalItems} URLs`);
import requests
response = requests.get(
'https://jmpy.me/api/v1/analytics/top-performing-urls',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
params={
'limit': 10,
'dateRange': '30d',
'urlType': 'all',
'sortBy': 'clicks',
'sortOrder': 'desc'
}
)
data = response.json()['data']
print("🏆 Top Performing URLs (Last 30 Days)")
print("=" * 50)
total_clicks = 0
for i, url in enumerate(data['urls'], 1):
name = url['name'] or url['short_code']
clicks = url['click_count']
total_clicks += clicks
print(f"{i:2}. {name[:30]:30} {clicks:>6} clicks")
print("=" * 50)
print(f"Total: {total_clicks} clicks")
print(f"Page {data['pagination']['page']} of {data['pagination']['totalPages']}")
<?php
$client = new GuzzleHttp\Client();
$response = $client->request('GET',
'https://jmpy.me/api/v1/analytics/top-performing-urls', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY'
],
'query' => [
'limit' => 10,
'dateRange' => '30d',
'sortBy' => 'clicks',
'sortOrder' => 'desc'
]
]);
$data = json_decode($response->getBody(), true)['data'];
echo "Top Performing URLs\n";
echo "===================\n\n";
foreach ($data['urls'] as $i => $url) {
$name = $url['name'] ?: $url['short_code'];
printf("%d. %s: %d clicks\n", $i + 1, $name, $url['click_count']);
}
?>
package main
import (
"fmt"
"net/http"
"net/url"
"io"
)
func main() {
baseURL := "https://jmpy.me/api/v1/analytics/top-performing-urls"
params := url.Values{}
params.Add("limit", "10")
params.Add("dateRange", "30d")
params.Add("sortBy", "clicks")
params.Add("sortOrder", "desc")
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 url = "https://jmpy.me/api/v1/analytics/top-performing-urls" +
"?limit=10&dateRange=30d&sortBy=clicks&sortOrder=desc";
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
- 200 OK
- 401 Unauthorized
{
"success": true,
"data": {
"urls": [
{
"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",
"click_count": 4523,
"unique_visitors": 3890,
"created_at": "2024-01-15T10:30:00Z",
"url_type": "standard",
"branded_domain": null,
"subdomain": null
},
{
"id": "661f9511-f3ac-52e5-b827-557766551111",
"short_code": "promo",
"short_url": "https://go.mycompany.com/promo",
"name": "Product Launch",
"original_url": "https://example.com/new-product",
"click_count": 2345,
"unique_visitors": 2012,
"created_at": "2024-02-01T14:00:00Z",
"url_type": "branded",
"branded_domain": "go.mycompany.com",
"subdomain": null
},
{
"id": "772f0622-g4bd-63f6-c938-668877662222",
"short_code": "newsletter",
"short_url": "https://marketing.jmpy.me/newsletter",
"name": "Weekly Newsletter Signup",
"original_url": "https://example.com/newsletter",
"click_count": 1876,
"unique_visitors": 1654,
"created_at": "2024-01-20T09:00:00Z",
"url_type": "subdomain",
"branded_domain": null,
"subdomain": "marketing"
}
],
"pagination": {
"page": 1,
"limit": 10,
"totalPages": 5,
"totalItems": 48
}
}
}
{
"success": false,
"error": {
"code": "UNAUTHORIZED",
"message": "Authentication required"
}
}
Use Cases
Create a leaderboard
Create a leaderboard
Display a leaderboard of your top performing links.
async function renderLeaderboard(containerId) {
const response = await fetch(
'https://jmpy.me/api/v1/analytics/top-performing-urls?limit=10&dateRange=7d',
{ headers: { 'Authorization': 'Bearer YOUR_API_KEY' } }
);
const { data } = await response.json();
const container = document.getElementById(containerId);
const totalClicks = data.urls.reduce((sum, url) => sum + url.click_count, 0);
container.innerHTML = `
<div class="leaderboard">
<h2>🏆 Top 10 Links This Week</h2>
<div class="total">Total: ${totalClicks.toLocaleString()} clicks</div>
${data.urls.map((url, i) => `
<div class="entry ${i < 3 ? 'top-three' : ''}">
<span class="rank">${i + 1}</span>
<span class="name">${url.name || url.short_code}</span>
<span class="clicks">${url.click_count.toLocaleString()}</span>
<div class="bar" style="width: ${(url.click_count / data.urls[0].click_count) * 100}%"></div>
</div>
`).join('')}
</div>
`;
}
Compare URL types
Compare URL types
Analyze performance differences between branded and standard URLs.
import requests
def compare_url_types():
types = ['standard', 'branded', 'subdomain']
results = {}
for url_type in types:
response = requests.get(
'https://jmpy.me/api/v1/analytics/top-performing-urls',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
params={
'urlType': url_type,
'limit': 100,
'dateRange': '30d'
}
)
data = response.json()['data']
urls = data['urls']
if urls:
total_clicks = sum(u['click_count'] for u in urls)
avg_clicks = total_clicks / len(urls)
results[url_type] = {
'count': len(urls),
'total_clicks': total_clicks,
'avg_clicks': avg_clicks
}
else:
results[url_type] = {'count': 0, 'total_clicks': 0, 'avg_clicks': 0}
print("URL Type Performance Comparison")
print("=" * 50)
for url_type, stats in results.items():
print(f"\n{url_type.upper()}:")
print(f" URLs: {stats['count']}")
print(f" Total Clicks: {stats['total_clicks']}")
print(f" Avg Clicks/URL: {stats['avg_clicks']:.1f}")
Automated weekly report
Automated weekly report
Generate a weekly email report of top performers.
interface WeeklyReport {
generatedAt: string;
topUrls: Array<{
rank: number;
name: string;
shortUrl: string;
clicks: number;
change: string;
}>;
summary: {
totalUrls: number;
totalClicks: number;
topPerformer: string;
};
}
async function generateWeeklyReport(): Promise<WeeklyReport> {
const response = await fetch(
'https://jmpy.me/api/v1/analytics/top-performing-urls?limit=10&dateRange=7d',
{ headers: { 'Authorization': 'Bearer YOUR_API_KEY' } }
);
const { data } = await response.json();
const topUrls = data.urls.map((url, i) => ({
rank: i + 1,
name: url.name || url.short_code,
shortUrl: url.short_url,
clicks: url.click_count,
change: '+0%' // Would compare with previous week
}));
return {
generatedAt: new Date().toISOString(),
topUrls,
summary: {
totalUrls: data.pagination.totalItems,
totalClicks: topUrls.reduce((sum, u) => sum + u.clicks, 0),
topPerformer: topUrls[0]?.name || 'N/A'
}
};
}
Related Endpoints
Analytics Overview
Get aggregated statistics for all URLs
Clicks Timeline
See click trends over time
Recent Activity
See the most recently clicked URLs
List Short URLs
Get all your short URLs with filters
⌘I