sink

Sink short link API operations via OpenAPI. Use when managing short links: creating, querying, updating, deleting, listing, importing, or exporting links. Also covers AI-powered slug generation and link analytics. Triggers: "create short link", "shorten URL", "delete link", "edit link", "list links", "export links", "import links", "link analytics", "AI slug".

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "sink" with this command: npx skills add miantiao-me/sink/miantiao-me-sink-sink

Sink API

Sink is a link shortener running on Cloudflare. Manage links via REST API.

Authentication

All endpoints require Bearer token authentication:

Authorization: Bearer YOUR_SITE_TOKEN

Token = NUXT_SITE_TOKEN environment variable.

Base URL

https://your-sink-domain

API Reference

Create Link

POST /api/link/create
Content-Type: application/json

{
  "url": "https://example.com/long-url",
  "slug": "custom-slug",
  "comment": "optional note",
  "expiration": 1735689599,
  "apple": "https://apps.apple.com/app/id123",
  "google": "https://play.google.com/store/apps/details?id=com.example"
}

Required: url Optional: slug (auto-generated if omitted), comment, expiration (unix timestamp), apple (iOS redirect), google (Android redirect), password, unsafe, title, description, image, cloaking, redirectWithQuery

If NUXT_SAFE_BROWSING_DOH is configured and unsafe is not explicitly set, the server auto-detects via DoH and marks unsafe links automatically.

Response (201):

{
  "link": {
    "id": "abc123",
    "url": "https://example.com/long-url",
    "slug": "custom-slug",
    "createdAt": 1718119809,
    "updatedAt": 1718119809
  },
  "shortLink": "https://your-domain/custom-slug"
}

Errors: 409 (slug exists)

Query Link

GET /api/link/query?slug=custom-slug

Response (200):

{
  "id": "abc123",
  "url": "https://example.com",
  "slug": "custom-slug",
  "createdAt": 1718119809,
  "updatedAt": 1718119809
}

Errors: 404 (not found)

Edit Link

PUT /api/link/edit
Content-Type: application/json

{
  "slug": "existing-slug",
  "url": "https://new-url.com",
  "comment": "updated note"
}

Required: slug (identifies which link to edit), url Optional: other fields to update

Response (201): Same as create

Errors: 404 (not found)

Delete Link

POST /api/link/delete
Content-Type: application/json

{
  "slug": "slug-to-delete"
}

Response: 200 (empty body)

List Links

GET /api/link/list?limit=20&cursor=abc123

Parameters:

  • limit: max 1024, default 20
  • cursor: pagination cursor from previous response

Response:

{
  "keys": [],
  "list_complete": false,
  "cursor": "next-cursor"
}

Export Links

GET /api/link/export

Response:

{
  "version": "1.0",
  "exportedAt": "2024-01-01T00:00:00Z",
  "count": 100,
  "links": [],
  "list_complete": true
}

Import Links

POST /api/link/import
Content-Type: application/json

{
  "links": [
    {"url": "https://example1.com", "slug": "ex1"},
    {"url": "https://example2.com", "slug": "ex2"}
  ]
}

Response: imported links array

AI Slug Generation

GET /api/link/ai?url=https://example.com/article

Response:

{
  "slug": "ai-generated-slug"
}

Verify Token

GET /api/verify

Verify if the site token is valid.

Response (200):

{
  "name": "Sink",
  "url": "https://sink.cool"
}

Errors: 401 (invalid token)

Link Fields

FieldTypeRequiredDescription
urlstringYesTarget URL (max 2048)
slugstringNoCustom slug (auto-generated)
commentstringNoInternal note
expirationnumberNoUnix timestamp
applestringNoiOS/macOS redirect URL
googlestringNoAndroid redirect URL
titlestringNoCustom title (max 256)
descriptionstringNoCustom description
imagestringNoCustom image path
cloakingbooleanNoEnable link cloaking
redirectWithQuerybooleanNoAppend query params to destination URL (overrides global NUXT_REDIRECT_WITH_QUERY)
passwordstringNoPassword protection for the link
unsafebooleanNoMark as unsafe (shows warning page before redirect)

Analytics Endpoints

Summary

GET /api/stats/summary

Metrics

GET /api/stats/metrics

Realtime

GET /api/stats/realtime

OpenAPI Docs

  • JSON: /_docs/openapi.json
  • Scalar UI: /_docs/scalar
  • Swagger UI: /_docs/swagger

cURL Examples

Create link:

curl -X POST https://your-domain/api/link/create \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://github.com/example"}'

List links:

curl https://your-domain/api/link/list \
  -H "Authorization: Bearer YOUR_TOKEN"

Delete link:

curl -X POST https://your-domain/api/link/delete \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"slug": "my-slug"}'

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

chinese-writing

No summary provided by upstream source.

Repository SourceNeeds Review
General

bm-md

No summary provided by upstream source.

Repository SourceNeeds Review
General

publish-weekly

No summary provided by upstream source.

Repository SourceNeeds Review
Research

batch-research

No summary provided by upstream source.

Repository SourceNeeds Review