All examples below assume you have SHORTIO_API_KEY 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:
```json
{
"domain": "",
"originalURL": "https://example.com/very/long/url/here"
}
```
Then run:
```bash
curl -s -X POST "https://api.short.io/links" --header "Authorization: ${SHORTIO_API_KEY}" --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:
```json
{
"domain": "",
"originalURL": "https://example.com/product/12345",
"path": "my-custom-slug"
}
```
Then run:
```bash
curl -s -X POST "https://api.short.io/links" --header "Authorization: ${SHORTIO_API_KEY}" --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:
```json
{
"domain": "",
"originalURL": "https://example.com/temporary-offer",
"ttl": "2026-12-31T23:59:59Z"
}
```
Then run:
```bash
curl -s -X POST "https://api.short.io/links" --header "Authorization: ${SHORTIO_API_KEY}" --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:
```bash
bash -c 'curl -s -X GET "https://api.short.io/links/expand?domain=${SHORTIO_DOMAIN}&path=my-custom-slug" --header "Authorization: ${SHORTIO_API_KEY}" --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:
```bash
LINK_ID="lnk_abc123xyz"
bash -c 'curl -s -X GET "https://api.short.io/links/${LINK_ID}" --header "Authorization: ${SHORTIO_API_KEY}" --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):
```bash
bash -c 'curl -s -X GET "https://api.short.io/api/links?domain_id=${SHORTIO_DOMAIN_ID}&limit=20" --header "Authorization: ${SHORTIO_API_KEY}" --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:
```bash
LINK_ID="lnk_abc123xyz"
```
Write to /tmp/shortio_request.json:
```json
{
"path": "new-custom-slug",
"originalURL": "https://example.com/new-destination"
}
```
Then run:
```bash
bash -c 'curl -s -X POST "https://api.short.io/links/${LINK_ID}" --header "Authorization: ${SHORTIO_API_KEY}" --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:
```bash
LINK_ID="lnk_abc123xyz"
bash -c 'curl -s -X DELETE "https://api.short.io/links/${LINK_ID}" --header "Authorization: ${SHORTIO_API_KEY}" --header "Accept: application/json"' | jq '{success, idString}'
```
---
9. List Domains
Get all domains associated with your account:
```bash
bash -c 'curl -s -X GET "https://api.short.io/api/domains" --header "Authorization: ${SHORTIO_API_KEY}" --header "Accept: application/json"' | jq '.[] | {id, hostname, state, linkType}'
```
---
10. Get Link Click Statistics
Get click counts for specific links:
```bash
bash -c 'curl -s -X GET "https://api.short.io/domains/${SHORTIO_DOMAIN_ID}/link_clicks?link_ids=${LINK_ID}" --header "Authorization: ${SHORTIO_API_KEY}" --header "Accept: application/json"' | jq '{linkId: .linkId, clicks}'
```
---