fyda logo

api.fyda.click

URL Shortener & URL Intelligence API

An API-first service that shortens URLs and classifies what each destination actually is. Classification runs first from URL structure alone, then deepens with an SSRF-guarded fetch of the destination. Short links carry a category prefix so the link itself tells you what kind of destination it points to.

Health probeReadiness probeControl panel

Authentication

Send a scoped bearer token on every request. Tokens are stored only as SHA-256 hashes and can be pinned to IP ranges.

curl -X POST https://api.fyda.click/api/v1/urls \
  -H "Authorization: Bearer sk_live_<prefix>_<secret>" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://shop.example.com/product/42?utm_source=x","tags":{"campaign":"spring"}}'

Scopes: urls:read · urls:create · urls:update · urls:delete · analytics:read · tags:read · tags:write · tokens:read · tokens:write · admin

Endpoints

MethodPathScopeDescription
POST/api/v1/urlsurls:createCreate a short URL. Classification starts immediately and continues in the background.
GET/api/v1/urlsurls:readList links. Filters: category, status, created_after, created_before, q, tag[key]=value. Pagination: limit, offset, sort.
GET/api/v1/urls/{id}urls:readFetch a single link with system classification, tags and user metadata.
PATCH/api/v1/urls/{id}urls:updateUpdate destination, status, expiry, tags or user metadata.
DELETE/api/v1/urls/{id}urls:deleteSoft-delete a link and purge it from the resolver cache.
GET/api/v1/urls/{id}/analyticsanalytics:readAggregated resolution analytics for one link.
GET/api/v1/urls/{id}/tagstags:readRead all user-defined tags for a link.
PUT/api/v1/urls/{id}/tagstags:writeReplace the full tag set.
PATCH/api/v1/urls/{id}/tagstags:writeMerge tags. A null value removes the key.
DELETE/api/v1/urls/{id}/tags/{key}tags:writeDelete a single tag key.
POST/api/v1/urls/{id}/reanalyzeurls:updateRe-run classification, including a fresh SSRF-guarded destination fetch.
GET/api/v1/urls/{id}/chainurls:readRead the redirect chain: ordered steps, hop modes, counters and the destination mode.
PUT/api/v1/urls/{id}/chainurls:updateReplace the whole chain with a steps array, and optionally set destination_mode, chain_enabled and click_limit.
PATCH/api/v1/urls/{id}/chainurls:updateUpdate destination_mode, chain_enabled or click_limit without touching the steps.
POST/api/v1/urls/{id}/chainurls:updateAppend one step (fixed_url, group or final) with hop_mode redirect or interstitial.
PATCH/api/v1/urls/{id}/chain/{stepId}urls:updateUpdate a single chain step.
DELETE/api/v1/urls/{id}/chain/{stepId}urls:updateRemove one chain step.
GET/api/v1/groupsurls:readList link groups (ad, affiliate or generic) with their member links.
POST/api/v1/groupsurls:updateCreate a link group with a selection mode: sequential, random, weighted or counter.
PATCH/api/v1/groups/{id}urls:updateUpdate a group's name, kind, selection mode, status or counter threshold.
DELETE/api/v1/groups/{id}urls:updateDelete a group that no redirect step references.
POST/api/v1/groups/{id}/linksurls:updateAdd a member link with an optional weight and label.
PATCH/api/v1/groups/{id}/links/{linkId}urls:updateUpdate a member link.
DELETE/api/v1/groups/{id}/links/{linkId}urls:updateRemove a member link.
GET/api/v1/categoriesurls:readList categories with their configured short-link prefixes.
GET/api/v1/tokenstokens:readList your API tokens. Secrets are never returned.
POST/api/v1/tokenstokens:writeCreate a token. The full secret is returned exactly once.
DELETE/api/v1/tokens/{id}tokens:writeRevoke a token immediately.
GET/api/v1/healthpublicLiveness probe.
GET/api/v1/readypublicReadiness probe — verifies the database is reachable.
GET/{prefix}/{short_code}publicResolve and redirect. The bare /{short_code} form also works.

Category prefixes

Every short link is served under the prefix for its detected category. Prefixes and the base domain are configurable in the control panel.

/sh/ — shopping/in/ — information/bl/ — blog/au/ — authentication/iv/ — invitation/vf/ — verification/pv/ — partial_verification/so/ — social/pay/ — payment/co/ — checkout/dl/ — download/docs/ — documentation/dev/ — developer/nw/ — news/vd/ — video/ad/ — audio/fm/ — form/sv/ — survey/sp/ — support/mk/ — marketing/lp/ — landing_page/api/ — api/u/ — unknown

Errors

INVALID_REQUEST · INVALID_URL · UNAUTHORIZED · FORBIDDEN · IP_NOT_ALLOWED · INSUFFICIENT_SCOPE · NOT_FOUND · CONFLICT · RATE_LIMITED · PAYLOAD_TOO_LARGE · DOMAIN_BLOCKED · INTERNAL

Errors always return { error: { code, message }, request_id }. Internal detail is never exposed.