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.
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
| Method | Path | Scope | Description |
|---|---|---|---|
| POST | /api/v1/urls | urls:create | Create a short URL. Classification starts immediately and continues in the background. |
| GET | /api/v1/urls | urls:read | List links. Filters: category, status, created_after, created_before, q, tag[key]=value. Pagination: limit, offset, sort. |
| GET | /api/v1/urls/{id} | urls:read | Fetch a single link with system classification, tags and user metadata. |
| PATCH | /api/v1/urls/{id} | urls:update | Update destination, status, expiry, tags or user metadata. |
| DELETE | /api/v1/urls/{id} | urls:delete | Soft-delete a link and purge it from the resolver cache. |
| GET | /api/v1/urls/{id}/analytics | analytics:read | Aggregated resolution analytics for one link. |
| GET | /api/v1/urls/{id}/tags | tags:read | Read all user-defined tags for a link. |
| PUT | /api/v1/urls/{id}/tags | tags:write | Replace the full tag set. |
| PATCH | /api/v1/urls/{id}/tags | tags:write | Merge tags. A null value removes the key. |
| DELETE | /api/v1/urls/{id}/tags/{key} | tags:write | Delete a single tag key. |
| POST | /api/v1/urls/{id}/reanalyze | urls:update | Re-run classification, including a fresh SSRF-guarded destination fetch. |
| GET | /api/v1/urls/{id}/chain | urls:read | Read the redirect chain: ordered steps, hop modes, counters and the destination mode. |
| PUT | /api/v1/urls/{id}/chain | urls:update | Replace the whole chain with a steps array, and optionally set destination_mode, chain_enabled and click_limit. |
| PATCH | /api/v1/urls/{id}/chain | urls:update | Update destination_mode, chain_enabled or click_limit without touching the steps. |
| POST | /api/v1/urls/{id}/chain | urls:update | Append one step (fixed_url, group or final) with hop_mode redirect or interstitial. |
| PATCH | /api/v1/urls/{id}/chain/{stepId} | urls:update | Update a single chain step. |
| DELETE | /api/v1/urls/{id}/chain/{stepId} | urls:update | Remove one chain step. |
| GET | /api/v1/groups | urls:read | List link groups (ad, affiliate or generic) with their member links. |
| POST | /api/v1/groups | urls:update | Create a link group with a selection mode: sequential, random, weighted or counter. |
| PATCH | /api/v1/groups/{id} | urls:update | Update a group's name, kind, selection mode, status or counter threshold. |
| DELETE | /api/v1/groups/{id} | urls:update | Delete a group that no redirect step references. |
| POST | /api/v1/groups/{id}/links | urls:update | Add a member link with an optional weight and label. |
| PATCH | /api/v1/groups/{id}/links/{linkId} | urls:update | Update a member link. |
| DELETE | /api/v1/groups/{id}/links/{linkId} | urls:update | Remove a member link. |
| GET | /api/v1/categories | urls:read | List categories with their configured short-link prefixes. |
| GET | /api/v1/tokens | tokens:read | List your API tokens. Secrets are never returned. |
| POST | /api/v1/tokens | tokens:write | Create a token. The full secret is returned exactly once. |
| DELETE | /api/v1/tokens/{id} | tokens:write | Revoke a token immediately. |
| GET | /api/v1/health | public | Liveness probe. |
| GET | /api/v1/ready | public | Readiness probe — verifies the database is reachable. |
| GET | /{prefix}/{short_code} | public | Resolve 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.
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.