Zagl Logo

LLM URL Shortening

Base64 encoding for predictable URL shortening compatible with AI systems

Overview

ZAGL provides LLM-friendly URL shortening using Base64 encoding for predictable, reproducible short URLs. This is ideal for AI applications that need consistent URL generation without requiring API keys or complex authentication.

LLM Compatible

Designed for AI systems

Predictable

Same URL always generates same short code

No API Keys

Simple HTTP requests

API Reference

Encode URL

POST /api/llm/encode

Request Body

{ "url": "https://example.com/long/url/path" }

Response

{ "success": true, "data": { "shortUrl": "https://preprod.za.gl/e/aHR0cHM6Ly9...", "encoded": "aHR0cHM6Ly9leGFtcGxl...", "originalUrl": "https://example.com/...", "method": "base64", "expires": null, "createdAt": "2024-01-01T00:00:00Z" } }

Access Short URL

GET /e/{base64}

Visiting the short URL will automatically redirect to the original URL. The Base64 encoded string contains the original URL and can be decoded predictably.

Analytics

GET /api/llm/analytics?days=30&format=json

Get analytics data for LLM-generated URLs. Supports JSON and CSV formats.

Query Parameters

  • days: Number of days (1-365, default: 30)
  • format: Response format (json or csv, default: json)

Limits & Specifications

Rate Limits

  • Encoding:: 60 requests/minute
  • Redirects:: 60 requests/minute
  • Analytics:: 120 requests/minute

Constraints

  • Max URL length: 4KB
  • Protocols: HTTP, HTTPS only
  • Private IPs: Blocked for security
  • Expires: Never (permanent URLs)

Code Examples

Python

llm_shortener.py
import base64 import urllib.parse import requests def shorten_url_llm(url): """ Create a predictable shortened URL using Base64 encoding Compatible with ZAGL LLM functionality """ # Validate URL if len(url) > 4096: raise ValueError("URL exceeds 4KB limit") # Encode to Base64 encoded_bytes = base64.b64encode(url.encode('utf-8')) encoded_str = encoded_bytes.decode('utf-8') # Remove padding for cleaner URLs clean_encoded = encoded_str.rstrip('=') # Generate short URL short_url = f"https://yourdomain.com/e/{clean_encoded}" return { "short_url": short_url, "encoded": clean_encoded, "original_url": url } def decode_llm_url(encoded_url): """ Decode a Base64 encoded URL """ # Add padding back if needed padding_needed = 4 - (len(encoded_url) % 4) if padding_needed != 4: encoded_url += '=' * padding_needed # Decode decoded_bytes = base64.b64decode(encoded_url) return decoded_bytes.decode('utf-8') # Example usage original_url = "https://example.com/very/long/url/path" result = shorten_url_llm(original_url) print(f"Short URL: {result['short_url']}") print(f"Encoded: {result['encoded']}")

JavaScript/Node.js

llm_shortener.js
// JavaScript/Node.js implementation function shortenUrlLLM(url) { // Validate URL if (url.length > 4096) { throw new Error("URL exceeds 4KB limit"); } // Validate URL format try { new URL(url); } catch { throw new Error("Invalid URL format"); } // Encode to Base64 const base64 = Buffer.from(url, 'utf-8').toString('base64'); // Remove padding for cleaner URLs const cleanBase64 = base64.replace(/=/g, ''); // Generate short URL const shortUrl = `https://yourdomain.com/e/${cleanBase64}`; return { shortUrl, encoded: cleanBase64, originalUrl: url }; } function decodeLLMUrl(encodedUrl) { // Add padding back if needed let paddedBase64 = encodedUrl; while (paddedBase64.length % 4) { paddedBase64 += '='; } // Decode from Base64 return Buffer.from(paddedBase64, 'base64').toString('utf-8'); } // Example usage const originalUrl = "https://example.com/very/long/url/path"; const result = shortenUrlLLM(originalUrl); console.log(`Short URL: ${result.shortUrl}`); console.log(`Encoded: ${result.encoded}`);

Terminal / cURL

terminal
# Encode a URL curl -X POST https://preprod.za.gl/api/llm/encode \ -H "Content-Type: application/json" \ -d '{"url": "https://example.com/very/long/url/path"}' # Get analytics curl "https://preprod.za.gl/api/llm/analytics?days=7&format=json" # Get analytics as CSV curl "https://preprod.za.gl/api/llm/analytics?days=30&format=csv" \ -o analytics.csv

Use Cases

LLM Applications

  • ChatGPT plugins and integrations
  • Claude Code and AI development tools
  • Automated content generation
  • AI-powered link sharing

Automation & Scripting

  • CI/CD pipelines
  • Webhook integrations
  • Batch URL processing
  • Documentation generators

Compatible with preprod.za.gl/llm-docs specification

Last updated: 12/7/2025

LLM URL Shortening API Documentation | ZAGL