Skills jo4
URL shortener, QR code generator, and link analytics API. Create short links, generate QR codes, and track click analytics.
install
source · Clone the upstream repo
git clone https://github.com/openclaw/skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/anandrathnas/jo4" ~/.claude/skills/openclaw-skills-jo4 && rm -rf "$T"
OpenClaw · Install into ~/.openclaw/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/anandrathnas/jo4" ~/.openclaw/skills/openclaw-skills-jo4 && rm -rf "$T"
manifest:
skills/anandrathnas/jo4/SKILL.mdsource content
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:
(required) - The destination URL (max 2048 chars)longUrl
(optional) - Link title (max 200 chars)title
(optional) - Link description (max 500 chars)description
(optional) - Custom alias (max 16 chars, alphanumeric/hyphen/underscore)shortUrl
(optional) - Unix timestamp for link expirationexpirationTime
(optional) - Boolean to enable password protectionpasswordProtected
(optional) - Password if protected (4-128 chars)password
UTM Parameters:
,utmSource
,utmMedium
,utmCampaign
,utmTermutmContent
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
| Code | Meaning |
|---|---|
| 400 | Bad request - invalid parameters |
| 401 | Unauthorized - missing or invalid API key |
| 403 | Forbidden - insufficient permissions |
| 404 | Not found - URL doesn't exist |
| 429 | Rate limit exceeded |