API and MCP server
Create and manage short links from your own code — over the REST API or through an MCP server in your AI assistant.
cutty has a public REST API and an MCP server. The first lets you create and manage links from your own code; the second does it straight from an AI assistant that speaks MCP. Both use the same API key.
API key
Authenticate every call with a header:
Authorization: Bearer ck_your_key
Where to get a key: sign in, open the dashboard → API keys → Create key. The full key (it starts with ck_) is shown only once, at creation — copy it somewhere safe right away. The limit is 120 requests per minute per key.
Base URL
All REST endpoints live under https://cutty.dev/api/v1. Requests and responses are JSON.
Create a link
POST /api/v1/links — the JSON body needs at least url. The rest is optional:
url— the destination address (required)slug— a custom slug, 3–40 chars; omit it for a random oneexpiresAt— expiry date in ISO 8601maxHits— click limit (1–1,000,000)password— a password that protects the linkutmSource,utmMedium,utmCampaign— UTM params appended on redirect
You get back slug, shortUrl and target.
curl -X POST https://cutty.dev/api/v1/links \
-H "Authorization: Bearer ck_your_key" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/some/very/long/path","slug":"sale"}'
List and read
GET /api/v1/links returns all your links. GET /api/v1/links/{slug} returns one.
curl https://cutty.dev/api/v1/links/sale \
-H "Authorization: Bearer ck_your_key"
Update and delete
PATCH /api/v1/links/{slug} updates selected fields (e.g. targetUrl, expiresAt, maxHits, status, password). DELETE /api/v1/links/{slug} removes the link.
curl -X PATCH https://cutty.dev/api/v1/links/sale \
-H "Authorization: Bearer ck_your_key" \
-H "Content-Type: application/json" \
-d '{"maxHits":500}'
MCP server
If you work with an AI assistant, you can wire cutty in over MCP (Model Context Protocol) and have it shorten and tidy links right inside the conversation. The server runs at https://mcp.cutty.dev/mcp over Streamable HTTP, and you authenticate with the same API key — the Authorization: Bearer ck_... header.
Available tools: create_link, list_links, get_link, update_link, delete_link and qr_link (a QR code for a link).
A sample entry for an MCP client config:
{
"mcpServers": {
"cutty": {
"url": "https://mcp.cutty.dev/mcp",
"headers": {
"Authorization": "Bearer ck_your_key"
}
}
}
}
Something not working?
Email [email protected] — I reply the same day.