Documentation

Complete user guide and API reference

Overview

Plain.ovh is built with SvelteKit and deployed on Netlify. It uses serverless functions for URL analysis and shortlink management.

Features

  • URL Analysis: Follows redirects, cleans parameters, provides domain insights.
  • Shortlinks: Creates transparent short URLs with optional stats.
  • Domain Similarity: Compares domains against a list of known brands.
  • Privacy-First: No user data storage, aggregated stats only.

User Guide

Quick start

Paste a URL into the Analyzer on the home page and click Analyze. The UI will follow redirects, produce a Final URL (the exact destination), and a Clean Link where common trackers have been removed while affiliate/support parameters are preserved by default.

Actions

  • Copy Redirect Story: copies the hop-by-hop redirect chain as plain text.
  • Copy JSON: copies a JSON representation of the full analysis (for debugging or sharing).
  • Copy for Reddit: copies a Markdown-formatted table ready to paste into Reddit comments or posts.
  • Copy Clean Link: copies the cleaned final URL (trackers removed; affiliate/support parameters kept).
  • Copy Final URL: copies the final resolved destination exactly as fetched.
  • Create Safe Shortlink: generates a transparent shortlink on plain.ovh that redirects to the cleaned URL.

Clean vs Final

Clean Link removes known tracking parameters (e.g., any utm_* params, gclid, etc.) and preserves common affiliate/support tags (for example tag, aff_id, affiliate_id, ref) so partners still earn credit when appropriate. The Final URL is the exact URL reached after following the HTTP redirects.

Examples

Example URL with two trackers and one affiliate parameter:

https://example.com/product/widget?utm_source=newsletter&utm_medium=email&aff_id=partner123

Result: utm_source and utm_medium would be removed; aff_id=partner123 would be kept.

Shortlinks & Stats

Shortlinks are created under /s/<slug>. Stats are aggregated only (click counts and optional top countries) — no IP addresses are stored.

Troubleshooting

  • INVALID_URL: ensure your input starts with http:// or https://.
  • FETCH_TIMEOUT: request timed out; try again or increase the server timeout config if you control the deployment.
  • TOO_MANY_REDIRECTS / LOOP_DETECTED: destination has excessive or cyclic redirects; try the destination directly or a different mirror.

API Quick Examples

Analyze with curl:

curl "https://plain.ovh/api/analyze?url=https%3A%2F%2Fexample.com%2Fpath%3Futm_source%3Dnews"

Create a shortlink:

curl -X POST "https://plain.ovh/api/shorten" -H "Content-Type: application/json" -d '{ "destinationUrl": "https://example.com" }'

Security & Privacy

  • Plain.ovh focuses on privacy: we aggregate stats only and do not store IPs tied to clicks.
  • Affiliate parameters are preserved by default to avoid breaking partner credit.
  • Always inspect unknown links with the analyzer before visiting them.

Contributing & Support

Contributions and issues are welcome — please open an issue or pull request in the project repository. For quick questions, use the issue tracker.

API Reference

Analyze URL

GET /api/analyze?url={encoded-url}

Analyzes a URL and returns redirect chain, cleaned URL, and insights.

Response

{
  "inputUrl": "https://example.com",
  "finalUrl": "https://example.com/clean",
  "hops": [
    {
      "url": "https://example.com",
      "status": 301,
      "kind": "destination"
    }
  ],
  "cleanUrl": "https://example.com/clean",
  "removedParams": ["utm_source"],
  "keptParams": ["tag"],
  "explanation": "Removed 1 tracking parameter(s). Kept affiliate/support parameters by default.",
  "insights": {
    "https": true,
    "domain": "example.com",
    "domainAge": {
      "registeredAt": "2020-01-01",
      "ageYears": 5,
      "source": "rdap"
    },
    "origin": {
      "country": "US",
      "source": "rdap"
    },
    "domainSimilarity": {
      "source": "default",
      "matches": [
        {
          "name": "Example Brand",
          "officialDomains": ["example.com"],
          "score": 1.0,
          "isOfficial": true,
          "reason": "Matches an official domain."
        }
      ]
    },
    "tech": ["Cloudflare"],
    "warnings": []
  }
}

Create Shortlink

POST /api/shorten

Creates a shortlink for the given destination URL.

Request Body

{
  "destinationUrl": "https://example.com",
  "slug": "optional-custom-slug"
}

Response

{
  "shortUrl": "https://plain.ovh/s/abc123"
}

Get Shortlink Stats

GET /api/stats?slug={slug}

Returns aggregated stats for a shortlink.

Response

{
  "slug": "abc123",
  "clickCount": 42,
  "countryTop": {
    "US": 20,
    "GB": 15
  }
}