Fearly.eu Public API (1.0.0)

Download OpenAPI specification:

Fearly.eu is a free, privacy-first URL shortener and QR code generator, hosted entirely in the EU. This API lets an account holder shorten URLs, list their own links and campaigns, and manage their own API keys — everything the browser extension and the account dashboard already do, available for your own scripts and apps too.

No visitor tracking, no third-party analytics, no data sales. Rate limits apply per account (not per key) and match whatever tier your account is on — creating extra keys does not grant extra quota.

Get a key by registering (POST /auth/register), logging into an existing account (POST /auth/login), or from the "Manage API Key" page in your dashboard if you already have an account.

Auth & Keys

Getting and managing API keys.

Create a new account and API key

Creates a brand-new registered_anonymous account (no email or password) and issues its first API key in one call. No authentication required. Rate-limited per IP address.

Request Body schema: application/json
label
string

A name for this key, e.g. "My Script". Defaults to "API Client".

Responses

Request samples

Content type
application/json
{
  • "label": "My Script"
}

Response samples

Content type
application/json
{
  • "account_number": "string",
  • "account_type": "registered_anonymous",
  • "tier_name": "string",
  • "api_key": {
    }
}

Log into an existing account and get a new key

Authenticates with either an account number or an email+password pair, and issues a new API key on that account. Existing keys on the account keep working — this does not replace them.

Request Body schema: application/json
required
account_number
string

Use this OR email+password, not both.

email
string <email>
password
string
label
string

A name for the new key. Defaults to "API Client".

Responses

Request samples

Content type
application/json
{
  • "email": "you@example.com",
  • "password": "your-password",
  • "label": "My Script"
}

Response samples

Content type
application/json
{
  • "account_number": "string",
  • "account_type": "registered_anonymous",
  • "tier_name": "string",
  • "api_key": {
    }
}

List your API keys

Returns every key on your account, active and revoked. The plaintext key itself is never included — only the prefix.

Authorizations:
bearerAuth

Responses

Request samples

curl https://www.fearly.eu/api/v1/keys \
  -H "Authorization: Bearer fearly_xxxxxxxxxxxx"

Response samples

Content type
application/json
{
  • "keys": [
    ]
}

Create an additional key

Creates another key on the same account. Capped at 10 active keys per account — revoke an unused one if you hit the limit.

Authorizations:
bearerAuth
Request Body schema: application/json
label
string

Responses

Request samples

Content type
application/json
{
  • "label": "Staging server"
}

Response samples

Content type
application/json
{
  • "api_key": {
    }
}

Revoke a key

Immediately invalidates a key. Anything using it stops working right away. This cannot be undone.

Authorizations:
bearerAuth
path Parameters
id
required
integer

Responses

Request samples

curl -X DELETE https://www.fearly.eu/api/v1/keys/42 \
  -H "Authorization: Bearer fearly_xxxxxxxxxxxx"

Response samples

Content type
application/json
{
  • "message": "string"
}

URLs

Shortening links and listing your own URLs.

Shorten a URL

Works with or without a key — anonymous requests get the (lower) anonymous rate limit; an authenticated request gets your account's tier limit, tracks the link on your account, and unlocks custom slugs and password protection.

Authorizations:
bearerAuthNone
Request Body schema: application/json
required
long_url
required
string <uri>
custom_code
string [ 3 .. 40 ] characters

A custom slug instead of a random one. 3–40 characters, letters/numbers/dashes/underscores only. Requires an account whose tier allows custom slugs (max_custom_slugs > 0) — otherwise rejected with unauthorized_custom_code.

password
string

If set, visitors must enter this password before the link redirects. Requires authentication.

analytics_enabled
boolean or null

Omit to use your account default.

Responses

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{}

List your URLs

Authorizations:
bearerAuth
query Parameters
limit
integer <= 100
Default: 50
offset
integer
Default: 0

Responses

Request samples

curl "https://www.fearly.eu/api/v1/urls?limit=20&offset=0" \
  -H "Authorization: Bearer fearly_xxxxxxxxxxxx"

Response samples

Content type
application/json
{
  • "urls": [
    ],
  • "total_count": 0,
  • "limit": 0,
  • "offset": 0
}

Campaigns

Read-only access to your campaigns and the URLs grouped under them.

List your campaigns

Authorizations:
bearerAuth

Responses

Request samples

curl https://www.fearly.eu/api/v1/campaigns \
  -H "Authorization: Bearer fearly_xxxxxxxxxxxx"

Response samples

Content type
application/json
{
  • "campaigns": [
    ]
}

List URLs in a campaign

Use default as the id to get URLs that aren't assigned to any specific campaign.

Authorizations:
bearerAuth
path Parameters
id
required
string
Example: default

Responses

Request samples

curl https://www.fearly.eu/api/v1/campaigns/default \
  -H "Authorization: Bearer fearly_xxxxxxxxxxxx"

Response samples

Content type
application/json
{
  • "urls": [
    ]
}