短链接 API
使用 RESTful API 编程方式创建和管理短链接
概述
短链接 API 允许您使用 API 密钥认证以编程方式创建、获取、更新和列出短链接。所有接口遵循 RESTful 设计原则。
体验平台
您可以在 API 调试器 中测试 API 接口。
认证方式
所有接口都需要 API 密钥认证。使用 API 密钥有两种方式:
-
授权请求头(推荐):
Authorization: Bearer YOUR_API_KEY -
查询参数:
?key=YOUR_API_KEY
频率限制
根据您的订阅等级配置频率限制:
- 免费计划: 每小时 200 次请求
- 专业计划: 每小时 2000 次请求
- 终身计划: 每小时 5000 次请求
每月配额
短链接创建受基于订阅的每月配额限制:
- 免费计划: 每月 50 个链接
- 专业计划: 每月 1,000 个链接
- 终身计划: 无限制
接口列表
获取链接列表
GET /api/v1/links获取您的短链接分页列表,支持筛选和排序。
查询参数
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
page | number | 1 | 页码(最小值:1) |
limit | number | 10 | 每页数量(1-100) |
search | string | - | 在 slug、目标 URL、描述中搜索 |
sortBy | string | createdAt | 排序字段:slug、createdAt、clicks、domain |
sortOrder | string | desc | 排序方式:asc 或 desc |
domain | string | - | 按域名筛选 |
tag | string | - | 按标签筛选 |
active | boolean | - | 按激活状态筛选 |
visible | boolean | - | 按可见性筛选 |
请求示例
curl -X GET "https://like.do/api/v1/links?page=1&limit=10&sortBy=clicks&sortOrder=desc" \
-H "Authorization: Bearer YOUR_API_KEY"成功响应 (200 OK)
{
"success": true,
"data": {
"items": [
{
"id": "abc123xyz",
"slug": "example",
"targetUrl": "https://example.com",
"domain": "ig.do",
"shortUrl": "https://ig.do/example",
"description": "示例链接",
"tag": "营销",
"clicks": 42,
"active": true,
"visible": false,
"expiration": "-1",
"createdAt": "2026-01-04T12:00:00.000Z",
"updatedAt": "2026-01-04T12:00:00.000Z"
}
],
"pagination": {
"page": 1,
"limit": 10,
"total": 25,
"totalPages": 3
}
}
}创建链接
POST /api/v1/links创建新的短链接。受每月配额限制。
请求体
{
"slug": "my-link",
"targetUrl": "https://example.com",
"domain": "ig.do",
"visible": false,
"active": true,
"expiration": "-1",
"password": "123456",
"description": "我的短链接",
"tag": "营销"
}参数说明
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
slug | string | 是 | URL 短标识(3-100 字符,字母数字、连字符、下划线) |
targetUrl | string | 是 | 目标 URL(必须是有效的 URL) |
domain | string | 是 | 短链接使用的域名 |
visible | boolean | 否 | 链接是否在公开列表中可见(默认:false) |
active | boolean | 否 | 链接是否激活(默认:true) |
expiration | string | 否 | 过期设置(默认:"-1" 表示永不过期) |
password | string | 否 | 6 字符密码用于链接保护 |
description | string | 否 | 链接描述(最多 500 字符) |
tag | string | 否 | 用于分类的标签(最多 50 字符) |
请求示例
curl -X POST https://like.do/api/v1/links \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"slug": "example",
"targetUrl": "https://example.com",
"domain": "ig.do"
}'成功响应 (201 Created)
{
"success": true,
"data": {
"id": "abc123xyz",
"slug": "example",
"targetUrl": "https://example.com",
"domain": "ig.do",
"shortUrl": "https://ig.do/example",
"visible": false,
"active": true,
"expiration": "-1",
"createdAt": "2026-01-04T12:00:00.000Z"
}
}错误响应 - 配额超限 (403 Forbidden)
{
"success": false,
"error": "您已达到免费计划的每月 50 个链接限制。升级到专业版可获得每月 1,000 个链接,或终身版可获得无限链接。",
"quota": {
"planType": "free",
"currentCount": 50,
"limit": 50,
"remaining": 0
}
}获取单个链接
GET /api/v1/links/{id}通过 ID 获取特定短链接的详细信息。
请求示例
curl -X GET https://like.do/api/v1/links/abc123xyz \
-H "Authorization: Bearer YOUR_API_KEY"成功响应 (200 OK)
{
"success": true,
"data": {
"id": "abc123xyz",
"slug": "example",
"targetUrl": "https://example.com",
"domain": "ig.do",
"shortUrl": "https://ig.do/example",
"description": "示例链接",
"tag": "营销",
"clicks": 42,
"active": true,
"visible": false,
"expiration": "-1",
"createdAt": "2026-01-04T12:00:00.000Z",
"updatedAt": "2026-01-04T12:00:00.000Z"
}
}更新链接
PUT /api/v1/links/{id}更新现有的短链接。您只能更新自己拥有的链接。
请求体
{
"targetUrl": "https://new-example.com",
"description": "更新后的描述",
"tag": "更新标签",
"active": true,
"visible": false,
"password": "newpwd",
"expiration": "-1"
}参数说明
所有参数都是可选的。只包含您想要更新的字段。
| 参数 | 类型 | 描述 |
|---|---|---|
targetUrl | string | 新的目标 URL |
description | string | 新的描述(最多 500 字符) |
tag | string | 新的标签(最多 50 字符) |
active | boolean | 激活状态 |
visible | boolean | 可见性状态 |
password | string | 新的 6 字符密码(或 null 以移除) |
expiration | string | 过期设置 |
请求示例
curl -X PUT https://like.do/api/v1/links/abc123xyz \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"targetUrl": "https://new-example.com",
"description": "更新后的链接"
}'成功响应 (200 OK)
{
"success": true,
"data": {
"id": "abc123xyz",
"updatedAt": "2026-01-04T13:00:00.000Z"
}
}域名访问权限
基于您的订阅等级的域名访问权限:
- 免费域名(
ig.do):所有用户可用 - 专业域名(
kfc.sh、uv.do):需要专业订阅或终身计划 - 自定义域名:根据订阅提供用户创建的域名
如果您尝试在没有适当订阅的情况下使用专业域名,将收到 403 错误。
错误响应
401 未授权 - 缺少 API 密钥
{
"success": false,
"error": "Missing API key. Provide it via Authorization header (Bearer token) or ?key= query parameter"
}401 未授权 - 无效的 API 密钥
{
"success": false,
"error": "Invalid or expired API key: [error details]"
}400 错误请求 - 无效数据
{
"success": false,
"error": "Invalid request data",
"details": [
{
"path": ["slug"],
"message": "Slug must be at least 3 characters"
}
]
}403 禁止访问 - 域名权限
{
"success": false,
"error": "You don't have permission to use the domain \"kfc.sh\". Premium domains require an active Pro subscription or Lifetime plan."
}404 未找到
{
"success": false,
"error": "Link not found or access denied"
}409 冲突 - Slug 已存在
{
"success": false,
"error": "A link with this slug already exists"
}代码示例
JavaScript (Fetch)
// 创建链接
const response = await fetch('https://like.do/api/v1/links', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
slug: 'example',
targetUrl: 'https://example.com',
domain: 'ig.do',
}),
});
const data = await response.json();
console.log(data);
// 获取链接详情
const linkId = data.data.id;
const getResponse = await fetch(`https://like.do/api/v1/links/${linkId}`, {
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
},
});
const linkData = await getResponse.json();
console.log(linkData);
// 更新链接
const updateResponse = await fetch(`https://like.do/api/v1/links/${linkId}`, {
method: 'PUT',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
description: '更新后的描述',
}),
});
const updateData = await updateResponse.json();
console.log(updateData);Python (requests)
import requests
api_key = 'YOUR_API_KEY'
base_url = 'https://like.do/api/v1/links'
headers = {
'Authorization': f'Bearer {api_key}',
'Content-Type': 'application/json',
}
# 创建链接
data = {
'slug': 'example',
'targetUrl': 'https://example.com',
'domain': 'ig.do',
}
response = requests.post(base_url, headers=headers, json=data)
print(response.json())
# 获取链接详情
link_id = response.json()['data']['id']
get_response = requests.get(f'{base_url}/{link_id}', headers=headers)
print(get_response.json())
# 更新链接
update_data = {
'description': '更新后的描述',
}
update_response = requests.put(f'{base_url}/{link_id}', headers=headers, json=update_data)
print(update_response.json())
# 获取链接列表
list_response = requests.get(f'{base_url}?page=1&limit=10', headers=headers)
print(list_response.json())创建 API 密钥
- 在仪表板中导航到 设置 > API 密钥
- 点击 创建 API 密钥
- 根据您的计划配置频率限制
- 安全保存您的 API 密钥(仅显示一次)
最佳实践
- 安全存储 API 密钥:永远不要将 API 密钥提交到版本控制
- 使用环境变量:将密钥存储在
.env文件或安全保险库中 - 监控频率限制:跟踪您的使用情况以避免达到限制
- 验证 slug:在创建之前检查 slug 的可用性以避免冲突
- 优雅地处理错误:为配额限制实现适当的错误处理
- 使用 HTTPS:始终使用安全连接进行 API 请求
- 检查配额:监控您的每月链接创建配额
- 批量操作:高效使用列表接口进行批量操作
注意事项
- 通过 API 创建的所有链接都会标记
channel: "api"以便跟踪 - Slug 的唯一性在所有用户和域名之间全局执行
- 保留字(例如
api、admin、dashboard)不能用作 slug - 每月配额在每月初重置
- 配额限制基于每月订阅的第一天
- Pro 和 Lifetime 用户可使用 API 调用日志
LikeDo文档