Modern URL shortening with QR codes and detailed analytics

v1.0.0

URL shortener, QR code generator, and link analytics API. Create short links, generate QR codes, and track click analytics.

1· 2.2k· 1 versions· 0 current· 0 all-time· Updated 2h ago· MIT-0

Jo4 - URL Shortener & Analytics API

Jo4 is a modern URL shortening service with QR code generation and detailed link analytics.

Authentication

All protected endpoints require an API key. Set your API key as an environment variable:

export JO4_API_KEY="your-api-key"

Get your API key from: https://jo4.io/api-keys

API Base URL

https://jo4-api.jo4.io/api/v1

Endpoints

Create Short URL (Authenticated)

curl -X POST "https://jo4-api.jo4.io/api/v1/protected/url" \
  -H "X-API-Key: $JO4_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "longUrl": "https://example.com/very-long-url",
    "title": "My Link"
  }'

Request Body:

  • longUrl (required) - The destination URL (max 2048 chars)
  • title (optional) - Link title (max 200 chars)
  • description (optional) - Link description (max 500 chars)
  • shortUrl (optional) - Custom alias (max 16 chars, alphanumeric/hyphen/underscore)
  • expirationTime (optional) - Unix timestamp for link expiration
  • passwordProtected (optional) - Boolean to enable password protection
  • password (optional) - Password if protected (4-128 chars)

UTM Parameters:

  • utmSource, utmMedium, utmCampaign, utmTerm, utmContent

Response:

{
  "response": {
    "id": 123,
    "slug": "abc123",
    "shortUrl": "abc123",
    "fullShortUrl": "https://jo4.io/a/abc123",
    "longUrl": "https://example.com/very-long-url",
    "title": "My Link",
    "qrCodeUrl": "https://jo4.io/qr/abc123"
  }
}

Create Anonymous Short URL (No Auth Required)

curl -X POST "https://jo4-api.jo4.io/api/v1/public/url" \
  -H "Content-Type: application/json" \
  -d '{"longUrl": "https://example.com"}'

Limited features, no analytics access.

Get URL Details

curl -X GET "https://jo4-api.jo4.io/api/v1/protected/url/{slug}" \
  -H "X-API-Key: $JO4_API_KEY"

Get URL Analytics

curl -X GET "https://jo4-api.jo4.io/api/v1/protected/url/{slug}/stats" \
  -H "X-API-Key: $JO4_API_KEY"

Response includes:

  • Total clicks
  • Clicks by date
  • Geographic distribution
  • Device/browser breakdown
  • Referrer sources

List My URLs

curl -X GET "https://jo4-api.jo4.io/api/v1/protected/url/myurls?page=0&size=20" \
  -H "X-API-Key: $JO4_API_KEY"

Update URL

curl -X PUT "https://jo4-api.jo4.io/api/v1/protected/url/{id}" \
  -H "X-API-Key: $JO4_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Updated Title",
    "longUrl": "https://new-destination.com"
  }'

Delete URL

curl -X DELETE "https://jo4-api.jo4.io/api/v1/protected/url/{id}" \
  -H "X-API-Key: $JO4_API_KEY"

QR Codes

Every short URL automatically gets a QR code at:

https://jo4.io/qr/{shortUrl}

Rate Limits

Rate limits vary by plan:

  • Free: 60 requests/minute
  • Pro: Up to 10,000 requests/minute
  • Anonymous (public endpoints): 10 requests/minute

API Documentation

Full OpenAPI/Swagger documentation: https://jo4-api.jo4.io/swagger-ui/index.html

Common Use Cases

1. Shorten a URL for sharing

curl -X POST "https://jo4-api.jo4.io/api/v1/protected/url" \
  -H "X-API-Key: $JO4_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"longUrl": "https://example.com/article", "title": "Article"}'

2. Create campaign tracking link

curl -X POST "https://jo4-api.jo4.io/api/v1/protected/url" \
  -H "X-API-Key: $JO4_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "longUrl": "https://mysite.com/landing",
    "title": "Q1 Campaign",
    "utmSource": "twitter",
    "utmMedium": "social",
    "utmCampaign": "q1-2026"
  }'

3. Create expiring link

curl -X POST "https://jo4-api.jo4.io/api/v1/protected/url" \
  -H "X-API-Key: $JO4_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "longUrl": "https://mysite.com/promo",
    "title": "Limited Offer",
    "expirationTime": 1738454400
  }'

Error Codes

CodeMeaning
400Bad request - invalid parameters
401Unauthorized - missing or invalid API key
403Forbidden - insufficient permissions
404Not found - URL doesn't exist
429Rate limit exceeded

Version tags

latestvk979t1e7jje1v4mfhzaa3h9sys80a30v

Runtime requirements

🔗 Clawdis
EnvJO4_API_KEY
Primary envJO4_API_KEY