Agent skill
shortio
Short.io API for link shortening. Use when user mentions "Short.io", "link shortener", "short URL", or URL management.
Install this agent skill to your Project
npx add-skill https://github.com/vm0-ai/vm0-skills/tree/main/shortio
SKILL.md
Short.io
Use Short.io via direct curl calls to create and manage short links on your branded domain.
Official docs:
https://developers.short.io/docs
When to Use
Use this skill when you need to:
- Create short links from long URLs
- Customize link slugs (paths) for branded URLs
- Track link clicks and analytics
- Manage multiple links (list, update, delete)
- Set link expiration using TTL (time-to-live)
Prerequisites
- Sign up at Short.io
- Add and configure your custom domain (or use the default short.io domain)
- Go to Integrations & API and create a Secret API Key
- Get your domain ID from Domain Settings (visible in browser URL bar)
export SHORTIO_TOKEN="your-secret-api-key"
export SHORTIO_DOMAIN="your-domain.com"
export SHORTIO_DOMAIN_ID="123456" # Optional, needed for list/stats operations
Pricing
- Free tier: 1,000 links, 50,000 tracked clicks/month
- API key is passed in the
Authorizationheader
How to Use
All examples below assume you have SHORTIO_TOKEN and SHORTIO_DOMAIN set.
Base URL: https://api.short.io
1. Create a Short Link
Create a new short link with auto-generated slug:
Write to /tmp/shortio_request.json:
{
"domain": "<your-domain-name>",
"originalURL": "https://example.com/very/long/url/here"
}
Then run:
curl -s -X POST "https://api.short.io/links" --header "Authorization: $(printenv SHORTIO_TOKEN)" --header "Content-Type: application/json" --header "Accept: application/json" -d @/tmp/shortio_request.json | jq '{shortURL, originalURL, path, idString}'
2. Create with Custom Slug
Create a short link with a custom path/slug:
Write to /tmp/shortio_request.json:
{
"domain": "<your-domain-name>",
"originalURL": "https://example.com/product/12345",
"path": "my-custom-slug"
}
Then run:
curl -s -X POST "https://api.short.io/links" --header "Authorization: $(printenv SHORTIO_TOKEN)" --header "Content-Type: application/json" --header "Accept: application/json" -d @/tmp/shortio_request.json | jq '{shortURL, originalURL, path, idString}'
3. Create with TTL (Expiration)
Create a link that expires after a specified time (in ISO 8601 format):
Write to /tmp/shortio_request.json:
{
"domain": "<your-domain-name>",
"originalURL": "https://example.com/temporary-offer",
"ttl": "2026-12-31T23:59:59Z"
}
Then run:
curl -s -X POST "https://api.short.io/links" --header "Authorization: $(printenv SHORTIO_TOKEN)" --header "Content-Type: application/json" --header "Accept: application/json" -d @/tmp/shortio_request.json | jq '{shortURL, originalURL, ttl}'
4. Get Link Info by Path
Get details of a short link using domain and path:
curl -s -X GET "https://api.short.io/links/expand?domain=$(printenv SHORTIO_DOMAIN)&path=my-custom-slug" --header "Authorization: $(printenv SHORTIO_TOKEN)" --header "Accept: application/json" | jq '{originalURL, shortURL, path, idString, createdAt, cloaking}'
5. Get Link Info by ID
Get details of a short link using its ID:
LINK_ID="lnk_abc123xyz"
curl -s -X GET "https://api.short.io/links/${LINK_ID}" --header "Authorization: $(printenv SHORTIO_TOKEN)" --header "Accept: application/json" | jq '{originalURL, shortURL, path, idString, createdAt}'
6. List All Links
Get a list of links for a domain (max 150 per request):
curl -s -X GET "https://api.short.io/api/links?domain_id=$(printenv SHORTIO_DOMAIN_ID)&limit=20" --header "Authorization: $(printenv SHORTIO_TOKEN)" --header "Accept: application/json" | jq '{count, links: [.links[] | {shortURL, originalURL, path, idString}]}'
7. Update a Link
Update an existing link's path, original URL, or other properties:
LINK_ID="lnk_abc123xyz"
Write to /tmp/shortio_request.json:
{
"path": "new-custom-slug",
"originalURL": "https://example.com/new-destination"
}
Then run:
curl -s -X POST "https://api.short.io/links/${LINK_ID}" --header "Authorization: $(printenv SHORTIO_TOKEN)" --header "Content-Type: application/json" --header "Accept: application/json" -d @/tmp/shortio_request.json | jq '{shortURL, originalURL, path, idString}'
8. Delete a Link
Delete a short link by ID:
LINK_ID="lnk_abc123xyz"
curl -s -X DELETE "https://api.short.io/links/${LINK_ID}" --header "Authorization: $(printenv SHORTIO_TOKEN)" --header "Accept: application/json" | jq '{success, idString}'
9. List Domains
Get all domains associated with your account:
curl -s -X GET "https://api.short.io/api/domains" --header "Authorization: $(printenv SHORTIO_TOKEN)" --header "Accept: application/json" | jq '.[] | {id, hostname, state, linkType}'
10. Get Link Click Statistics
Get click counts for specific links:
curl -s -X GET "https://api.short.io/domains/$(printenv SHORTIO_DOMAIN_ID)/link_clicks?link_ids=${LINK_ID}" --header "Authorization: $(printenv SHORTIO_TOKEN)" --header "Accept: application/json" | jq '{linkId: .linkId, clicks}'
Create Link Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
domain |
string | Yes | Your branded domain |
originalURL |
string | Yes | The destination URL |
path |
string | No | Custom slug (auto-generated if not provided) |
title |
string | No | Link title for organization |
ttl |
string | No | Expiration date (ISO 8601 format) |
allowDuplicates |
boolean | No | Allow creating duplicate links (default: false) |
cloaking |
boolean | No | Enable URL cloaking |
password |
string | No | Password protect the link |
expiresAt |
string | No | Redirect URL when link expires |
tags |
array | No | Tags for categorization |
Response Fields
| Field | Description |
|---|---|
shortURL |
The generated short URL |
secureShortURL |
HTTPS version of short URL |
originalURL |
The destination URL |
path |
The slug/path of the short link |
idString |
Unique link ID (use for updates/deletes) |
DomainId |
Domain ID |
createdAt |
Creation timestamp |
cloaking |
Whether cloaking is enabled |
hasPassword |
Whether link is password protected |
Guidelines
- Save the idString: Always store the
idStringfrom the response - you'll need it to update or delete links - Use TTL for temporary links: Set expiration for promotional or time-sensitive links
- Limit parameter: When listing links, max limit is 150 per request; use pagination for more
- Custom domains: Configure DNS properly before using custom domains
- Avoid duplicates: Set
allowDuplicates: falseto prevent creating multiple short links for the same URL - Check rate limits: API has rate limiting; implement retries with backoff for high-volume usage
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
brave-search
Brave Search API for web search. Use when user says "search web", "Brave search", or asks to "find on web" without specifying Google.
supadata
Supadata API for YouTube/web data. Use when user mentions "Supadata", "YouTube data", "channel stats", or web scraping data.
roadmap-planning
Build and prioritize product roadmaps using scoring models like RICE, ICE, and value-effort matrices. Activate when creating a product roadmap, prioritizing features, sequencing initiatives, mapping dependencies, balancing team capacity, choosing between Now/Next/Later or quarterly planning, or communicating roadmap tradeoffs to executives and stakeholders.
qdrant
Qdrant API for vector search. Use when user mentions "Qdrant", "vector database", "semantic search", or embeddings storage.
calendly
Calendly scheduling API. Use when user mentions "Calendly", "calendly.com", "schedule a meeting", "booking link", "event types", or asks about interview scheduling.
stripe
Stripe API for payments. Use when user mentions "Stripe", "payment", "subscription", "billing", "invoice", or asks about payment processing.
Didn't find tool you were looking for?