# furl.io

> furl.io is a URL shortener with sub-millisecond redirects and live click analytics. Agents can create and manage short links (https://furl.io/<code>) and read their analytics through a remote MCP server or a REST API, authenticated with a furl.io API key.

Operated by SystGrid Solutions Pvt Ltd (Mumbai, India). Data is stored in India.

## Access for AI agents

- Get an API key: sign in at https://furl.io/login → Settings → API keys → Create. Keys look like `furl_...` (45 characters) and are shown once. A key acts on the workspace it was created in (see Workspaces below).
- MCP server (recommended): `https://furl.io/mcp` — Streamable HTTP transport, header `Authorization: Bearer furl_YOUR_KEY`.
  - `shorten_url` {url, custom_code?, expires_at? (RFC 3339; Pro and higher; default never), max_views? (1-100000; Pro and higher), redirect_type? (301|302|307|308)} → short_url, short_code, expires_at, max_views
  - `get_link` {code} · `list_links` {query?, limit?} · `get_link_stats` {code, range? (24h|7d|30d|90d)}
  - `update_link` {code, url?, status? (active|paused|archived), expires_at? ("never" removes it), max_views? (0 removes the limit)} · `delete_link` {code} (permanent)
  - Claude Code: `claude mcp add --transport http furl https://furl.io/mcp --header "Authorization: Bearer furl_YOUR_KEY"`
- OpenAPI 3.0 spec for function calling: https://furl.io/api/v1/openapi.json

## REST API essentials

Base URL `https://furl.io/api/v1`, JSON, header `Authorization: Bearer furl_YOUR_KEY` (or `X-API-Key`).

- Create a link: `POST /links` {"original_url": "https://example.com", "custom_code"?, "expires_at"? (RFC 3339; omit or null = never expires), "max_clicks"? (1-100000); expires_at and max_clicks need Pro or higher, "http_status_code"? (301|302|307|308), "webhook_url"?, "google_analytics_id"?, "ga_api_secret"? (webhook and GA4 fields need Pro or higher)} → 201 with `short_url`
- `GET /links?q=&limit=&cursor=` · `GET /links/{code}` · `PATCH /links/{code}` · `DELETE /links/{code}`
- Analytics: `GET /links/{code}/stats?from=&to=&interval=hour|day`, `GET /links/{code}/stats/breakdown?dimension=country|city|referrer_domain|device_type|os|browser`, `GET /links/{code}/stats/live`
- Workspaces: links, API keys, plan and billing belong to a workspace. Signed-in sessions pick one with the header `X-Furl-Workspace: <workspace id>` (omit for the personal workspace); API keys ignore it. `GET /workspaces`, `GET /workspace`, `/workspace/members`, `/workspace/invites`, `/workspace/domains`.
- Errors: `{"error": {"code": "...", "message": "..."}}`. Common codes: validation_error (422), plan_limit_reached (403, active link limit reached), custom_code_limit (403, custom code allowance used up), link_expiry_not_in_plan (403, expiry date or view limit not included in the plan), integrations_not_in_plan (403, webhooks and GA4 forwarding not included in the plan), code_blocked (403, reserved brand/word/domain), code_taken (409), not_found (404), insufficient_role (403, your workspace role doesn't allow it), not_member (403), too_many_concurrent_requests (429).

## Plans

Pricing: https://furl.io/pricing (public JSON: `GET /plans`). Plans apply per workspace. `GET /me` returns the current workspace's `plan` and `usage` (active_links, custom_codes, custom_code_addon).

- Free ($0): 100 active links, no custom codes included (extra codes $1 per code / month), 1 team member, no custom domains.
- Pro ($12/month): 300 active links, webhooks and GA4 forwarding, expiry by date or number of clicks, 30 custom codes included (extra codes $1 per code / month), 3 team members, 1 custom domain.
- Enterprise ($99/month): 20,000 active links, webhooks and GA4 forwarding, expiry by date or number of clicks, unlimited custom codes, 25 team members, 10 custom domains.
- Custom (price on request, contact sales@furl.io): unlimited active links, unlimited team members and custom domains, webhooks and GA4 forwarding, expiry by date or number of clicks, unlimited custom codes, limits and invoicing tailored to the organisation. Plans with `price_on_request: true` can't be bought online.
- Links never expire on any plan unless their owner sets an expiry.
- Paid plans and extra custom codes are prepaid for 1–12 months (no automatic renewal) and bought by the workspace owner at https://furl.io/dashboard/settings#billing.
- An active link is one with status active that hasn't expired. Prices are in USD plus applicable taxes (18% GST in India).

## Workspaces and teams

- Every account has a personal workspace (just for that person). Team workspaces are shared: members are invited by email and have a role.
- Roles: member (create, edit and delete any link in the workspace; analytics), admin (also API keys, invitations, members, custom domains, rename), owner (also billing, ownership transfer, deleting the workspace). One owner per workspace.
- Seats per workspace (members plus open invitations) and custom domains depend on the workspace's plan. Custom domains are verified with a DNS TXT record; verified domains will soon be usable for short links.

## Rules agents should know

- Links never expire by default. On Pro and higher, expires_at makes a link return 410 Gone after that time, and max_views/max_clicks after N visits; chat link previews don't consume views.
- Removing an expiry or view limit is allowed on every plan; after a downgrade, existing links keep their settings.
- Webhooks and GA4 forwarding (webhook_url, google_analytics_id, ga_api_secret) need Pro or higher; removing them (null) is allowed on every plan. After a downgrade, a link keeps these settings and keeps redirecting, but clicks aren't forwarded until the plan includes them again.
- Short codes are case-sensitive. Each custom code uses one code from the plan's allowance; custom codes cannot use well-known brand names or domains.
- Rate limits per IP: 20 API requests/second (burst 40); at most 4 concurrent analytics requests per account.
- Destinations must be http(s) URLs and cannot point back to furl.io.

## Docs

- [AI agents & MCP](https://furl.io/docs/ai-agents): setup for Claude, Cursor, VS Code, OpenAPI tools
- [REST API reference](https://furl.io/docs/api): every endpoint, field and error code
- [Pricing](https://furl.io/pricing): plans, limits and prices
- [Using the dashboard](https://furl.io/docs/guide): links, expiry, view limits, analytics, workspaces and teams, custom domains, plans
- [Webhooks](https://furl.io/docs/webhooks): signed click events and a Python receiver (Pro and higher)
- [Terms of Use](https://furl.io/legal/terms) and [Privacy Policy](https://furl.io/legal/privacy)
