API documentation

Create, update and analyse short links from your own code. The API is JSON over HTTPS and is available on every plan, including Free.

Base URL
https://urelf.com/api/v1
OpenAPI 3.1 spec
/api/v1/openapi.json

Authentication

Create an API key in Settings → API keys and send it in the Authorization header of every request. Keys start with urelf_ and are shown only once, so store them somewhere safe. Free accounts can have up to 2 keys. Your email address must be verified.

Request header
Authorization: Bearer urelf_your_api_key

Keep keys on your server. Never put them in browser code or mobile apps. If a key leaks, delete it in Settings and create a new one.

Rate limits & quotas

Requests are rate-limited per account, per minute. Creating links also counts against your plan’s daily quota (resets at midnight UTC) and total quota (deleting a link frees a slot).

PlanRequests / minuteNew links / dayTotal links
Free6010100
Pro(coming soon)60050010,000
Business(coming soon)3,0002,000100,000

Response headers

  • X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset (seconds until the window resets): on every successful response.
  • X-Quota-Daily-Remaining, X-Quota-Total-Remaining: on POST /api/v1/links. Use GET /api/v1/me to read your quota at any time.
  • Retry-After (seconds): on 429 responses.

Errors

Errors use standard HTTP status codes and a consistent JSON body. code is stable and safe to branch on; message is human-readable and safe to show to users.

429 Too Many Requests
{
  "error": {
    "code": "DAILY_QUOTA_EXCEEDED",
    "message": "You can create 10 links per day on the Free plan. The limit resets at midnight UTC.",
    "details": {
      "resetsAt": "2026-10-14T00:00:00.000Z"
    }
  }
}
CodeStatusMeaning
BAD_REQUEST400The request body or query is invalid. details lists each problem.
INVALID_URL400The destination isn’t a valid public http(s) URL.
UNSAFE_URL400The destination is blocked (malware, phishing, private network, another shortener or URelf itself).
INVALID_SLUG400The custom short name doesn’t follow the naming rules.
RESERVED_SLUG400The short name is reserved for URelf pages.
UNAUTHORIZED401Missing, invalid or revoked API key.
EMAIL_NOT_VERIFIED403Verify your email address before using the API.
FORBIDDEN403You’re not allowed to do this.
ACCOUNT_SUSPENDED403The account has been suspended.
TOTAL_QUOTA_EXCEEDED403You’ve reached your plan’s total link limit. Delete a link to free a slot.
NOT_FOUND404The link doesn’t exist or isn’t yours.
SLUG_TAKEN409The custom short name is already in use.
DAILY_QUOTA_EXCEEDED429You’ve created today’s maximum number of links. details.resetsAt says when it resets (midnight UTC).
RATE_LIMITED429Too many requests. Wait for the number of seconds in Retry-After.
INTERNAL500Something went wrong on our side. Retry with backoff.
SERVICE_UNAVAILABLE503A dependency is temporarily unavailable. Retry with backoff.

Endpoints

Check a short name

GET/api/v1/slugs/{slug}

Whether a custom short name is free to use. When it isn’t, reason explains why: it’s invalid, reserved or already taken.

Request
curl https://urelf.com/api/v1/slugs/spring-sale \
  -H "Authorization: Bearer urelf_your_api_key"
Response · 200 OK
{
  "available": false,
  "reason": "Already taken."
}

Get your account and usage

GET/api/v1/me

Your plan and how much of your daily and total quota you’ve used.

Request
curl https://urelf.com/api/v1/me \
  -H "Authorization: Bearer urelf_your_api_key"
Response · 200 OK
{
  "id": "cm9x1a2b30000qz8l7k1d9xyz",
  "name": "Ada Lovelace",
  "email": "[email protected]",
  "plan": "FREE",
  "usage": {
    "plan": "FREE",
    "today": {
      "used": 3,
      "limit": 10,
      "resetsAt": "2026-10-14T00:00:00.000Z"
    },
    "total": {
      "used": 42,
      "limit": 100
    }
  }
}