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 your best performing short URLs ranked by clicks
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
}
}page if provided.7d, 30d, 90d, 1y, all_time, custom.
Takes precedence over days if specified.dateRange is custom.dateRange is custom.all, standard, branded, subdomain.See Branded Domains and Subdomains for more information.clicks, name, created_at.asc or desc.Show URL Object
standard, branded, or subdomain.# 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());
{
"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"
}
}
Create a leaderboard
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
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
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'
}
};
}