DEV Community

Anand Rathnas
Anand Rathnas

Posted on

I Built an API-First URL Shortener You Can White-Label (and Why Bit.ly Pricing Made Me Do It)

The Problem: URL Shorteners Hate Developers

I needed to add link shortening to a side project. Simple, right?

Bit.ly: $348/year for API access. Limited calls. Still shows their branding.

Rebrandly: $69/month for decent API limits. Custom domains cost extra.

TinyURL: Free, but no API. Copy-paste like it's 2005.

All I wanted was:

  • A clean REST API I can call from anywhere
  • My own domain (not bit.ly/xyz)
  • No monthly fees eating into my project budget
  • Something I can spin up in 5 minutes

So I built it.


Introducing jo4.io

jo4.io is an API-first URL shortener built for developers.

# Create a short link
curl -X POST https://jo4-api.jo4.io/api/v1/protected/url \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/very/long/path"}'
Enter fullscreen mode Exit fullscreen mode

Response:

{
  "shortUrl": "abc123",
  "originalUrl": "https://example.com/very/long/path"
}
Enter fullscreen mode Exit fullscreen mode

Access the shortened link at:

https://jo4-api.jo4.io/api/v1/public/a/abc123
Enter fullscreen mode Exit fullscreen mode

That's it. No OAuth dance. No webhook configuration wizard. No 47-page API docs for a simple POST request.


Why API-First Matters

Most URL shorteners are built for marketers clicking buttons in a dashboard. The API is an afterthought—rate-limited, poorly documented, expensive.

jo4 flips that. The API is the product. The dashboard is just a nice-to-have.

Real Use Cases I've Built With It

Slack Bot Integration

@app.route("/shorten", methods=["POST"])
def shorten():
    url = request.form.get("text")
    response = requests.post(
        "https://jo4-api.jo4.io/api/v1/protected/url",
        headers={"Authorization": f"Bearer {API_KEY}"},
        json={"url": url}
    )
    short_code = response.json()["shortUrl"]
    return f"https://jo4-api.jo4.io/api/v1/public/a/{short_code}"
Enter fullscreen mode Exit fullscreen mode

CI/CD Build Artifacts
Share build artifacts with short, memorable links that expire after 7 days.

Zapier/Make Automation
Shorten links automatically when new content is published.

Embedded in My SaaS
Users create shareable links without ever leaving my app.


White-Label: Your Brand, Not Mine

Here's what annoyed me about every URL shortener: even when you pay for custom domains, their branding is everywhere.

jo4 is different. With the white-label option:

Feature What You Get
Custom domain links.yourcompany.com
Dashboard Your logo, your colors
Short URLs yourcompany.com/promo
QR codes Your logo in the center
Emails From your domain

Nobody sees "jo4" anywhere.

This is perfect for:

  • Agencies offering branded links to clients
  • SaaS products embedding link shortening as a feature
  • Enterprises with strict branding requirements

The Technical Details (For Those Who Care)

Stack

  • Backend: Spring Boot 3.5, Java 21
  • Database: PostgreSQL with connection pooling
  • Cache: Redis for fast redirects
  • Auth: JWT with API key scopes
  • Infra: AWS with global CDN

Performance

Redirects happen at the edge. Average response time: <50ms globally.

Short codes use base62 encoding (a-z, A-Z, 0-9) for maximum density. Six characters = 56 billion possible URLs.

Collision Handling

Auto-generated slugs check for collisions before saving. Custom slugs return a clear error if taken.


What's Included

Core

  • Unlimited short links
  • Custom slugs (/sale, /demo) or auto-generated
  • Link expiration (optional)
  • Password protection (optional)
  • 301 or 302 redirects

Analytics

  • Click counts
  • Referrer tracking
  • Geographic breakdown
  • Device & browser stats
  • CSV/JSON export

Developer Experience

  • REST API with OpenAPI docs
  • Scoped API keys (read/write/admin)
  • Webhooks for click events
  • Rate limiting you control
  • SDKs for JS, Python, Go

Pricing That Doesn't Suck

Plan Price What You Get
Free $0 1K links, 10K clicks/mo, API access
Pro $9/mo Unlimited everything
White-Label $149/mo Rebrand + resell rights

No "contact sales" for basic features. No surprise overages. No enterprise tax.


vs. The Competition

Feature Bit.ly Rebrandly jo4
API access Paid tier Paid tier Free tier
Custom domains 1 (paid) 5 (paid) 5 (paid)
White-label No Extra $$ Available
Free tier No No Yes

Try It Now

  1. Sign up at jo4.io
  2. Copy your API key
  3. curl away

That's it. You're shortening links in under 2 minutes.


What's Next

Currently building:

  • Browser extension for one-click shortening
  • Team workspaces with shared analytics
  • More OAuth providers for the dashboard
  • Cloudflare Workers deployment option

Questions?

Drop them in the comments. Happy to dive into:

  • API design decisions
  • How the redirect caching works
  • White-label implementation details
  • Anything else

If you've been burned by URL shortener pricing, I feel you. That's why this exists.


Check it out: jo4.io

Your links. Your brand. Your API.

Top comments (0)