为开发者打造

API 文档

通过 Quik.mn REST API 以编程方式创建、管理链接并获取统计数据。

全部服务

Quik.mn 平台的全部产品——支持 REST API 与网页端。

短链接
REST API
QR码
REST API
Email Counter
REST API
Countdown
REST API
Quik Bio
REST API
菜单QR码
REST API
邮件签名
REST API
UTM builder
免费工具

基础地址

所有接口均以下列基础地址开头:

https://quik.mn/api/v1

身份验证

每次请求都需在 Authorization 请求头中带上控制台生成的 API 密钥:

Authorization: Bearer qk_live_...

切勿把密钥透露给任何人。一旦泄露,请在控制台重新生成。

接口列表

短链接
POST /api/v1/links 创建新的短链接
GET /api/v1/links 获取链接列表
GET /api/v1/links/{id} 获取单条链接
PATCH /api/v1/links/{id} 修改链接
DELETE /api/v1/links/{id} 删除链接
POST /api/v1/links/{id}/extend 延长有效期——请求体:{"days": 365}
QR码
GET /api/v1/links/{id}/qr 获取二维码 — ?format=png|svg&size=300&fg=241210&bg=FFFFFF
Email Counter
POST /api/v1/timers 创建邮件计时器 — 响应:gif_url + embed_html
GET /api/v1/timers 计时器列表
GET /api/v1/timers/{id} 单个计时器详情
PATCH /api/v1/timers/{id} 修改计时器
DELETE /api/v1/timers/{id} 删除计时器
倒计时页面
POST /api/v1/countdowns 创建倒计时页面 — 响应:page_url
GET /api/v1/countdowns 页面列表
GET /api/v1/countdowns/{id} 单个页面详情
PATCH /api/v1/countdowns/{id} 修改页面
DELETE /api/v1/countdowns/{id} 删除页面
Quik Bio
POST /api/v1/bio-pages 创建 Bio 页面 — 响应:page_url(头像仅支持网页端上传)
GET /api/v1/bio-pages 获取 Bio 页面列表
GET /api/v1/bio-pages/{id} 获取单个 Bio 页面 — 含全部链接
PATCH /api/v1/bio-pages/{id} 修改 Bio 页面
DELETE /api/v1/bio-pages/{id} 删除 Bio 页面
GET /api/v1/bio-pages/{id}/stats Bio 统计 — 浏览量与点击量
GET /api/v1/bio-pages/{id}/links 获取 Bio 页面的链接列表
POST /api/v1/bio-pages/{id}/links 添加 Bio 链接
PATCH /api/v1/bio-pages/{id}/links/{lid} 修改 Bio 链接
DELETE /api/v1/bio-pages/{id}/links/{lid} 删除 Bio 链接
菜单QR码
POST /api/v1/menus 创建菜单 — 响应:page_url
GET /api/v1/menus 获取菜单列表
GET /api/v1/menus/{id} 获取单份菜单 — 含全部菜品
PATCH /api/v1/menus/{id} 修改菜单
DELETE /api/v1/menus/{id} 删除菜单
GET /api/v1/menus/{id}/stats 扫码统计 — 总量、近 30 天、按餐桌
GET /api/v1/menus/{id}/items 获取菜品列表
POST /api/v1/menus/{id}/items 添加菜品 — 图片仅支持网页端上传
PATCH /api/v1/menus/{id}/items/{iid} 修改菜品
DELETE /api/v1/menus/{id}/items/{iid} 删除菜品
邮件签名
POST /api/v1/signatures 创建邮件签名 — 标识仅接受 URL 形式
GET /api/v1/signatures 获取签名列表
GET /api/v1/signatures/{id} 获取单个签名 — 含 signature_html
PATCH /api/v1/signatures/{id} 修改签名
DELETE /api/v1/signatures/{id} 删除签名
账户
GET /api/v1/me 当前账户信息

参数

POST /api/v1/links — 请求体字段:

url required 目标长网址(http/https)。
alias optional 自定义短名(字母、数字、- 和 _;1–64 个字符)。以 slug 字段提交同样有效。
title optional 标题(最多 200 个字符)。
expires_at optional 过期时间——未来的某个日期(例如 2026-12-31 23:59:59)。最长 1 年;不填默认 1 年。PATCH 时传 null 会重置为 1 年。
expire_days optional 也可按天数指定:1/7/30/90/180/365。比 expires_at 更简便。
starts_at optional 生效时间——UTC 日期时间(例如 2026-08-01 02:00:00)。在设定时间之前访客会看到倒计时;必须早于 expires_at。PATCH 时传 null 则立即生效。
on_duplicate optional 当同一网址已存在有效链接时:reuse(默认——返回原链接,并附带 reused:true 字段)或 create(新建一条)。指定别名时始终新建。

GET /api/v1/links — 查询参数:

limit 每页返回的条数(1–100,默认 25)。
offset 跳过的行数(用于分页)。
q 搜索——匹配短名、标题和目标网址。

错误格式

每个错误都会返回 HTTP 状态码(401、404、409、422、429)以及统一的 JSON 结构:

{ "error": "alias_taken", "message": "该别名已被保留或已被使用。" }

常见错误码: unauthorized (401), not_found (404), alias_taken (409), invalid_url / invalid_alias / invalid_expires_at / invalid_starts_at (422), rate_limited (429).

调用限制

每个 API 密钥每分钟 60 次请求
超出后将返回 429 rate_limited 响应——请稍候片刻再重试。

请求示例

创建短链接的 cURL 示例:

curl -X POST https://quik.mn/api/v1/links \
  -H "Authorization: Bearer qk_live_xxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/很长的/路径",
    "alias": "promo",
    "title": "春季活动",
    "expires_at": "2026-12-31 23:59:59"
  }'

Webhook

在控制台的回调板块注册接口地址后,所选事件一旦发生,我们就会向你的网址发送 JSON POST 请求。返回 200~299 状态码即视为成功;否则将按 1 分钟 → 10 分钟的间隔最多重试 3 次。连续失败 10 次后,该回调会自动停用。

link.created 有新的短链接创建时触发(网页端与 API)
link.deleted 链接被删除时触发
link.expired 链接过期或达到点击上限时触发(每日检查)
link.clicks.milestone 点击量突破 100 / 1,000 / 10,000 时触发——回调数据中会带上 milestone 字段
timer.expired 邮件计时器结束时触发
countdown.expired 倒计时页面结束时触发
webhook.ping 点击「测试」按钮时发送的测试事件

每次投递的数据结构(示例):

{
  "event": "link.created",
  "created_at": "2026-07-18T09:30:00+00:00",
  "data": {
    "link": {
      "id": 42, "slug": "promo", "short_url": "https://quik.mn/promo",
      "long_url": "https://example.com/很长的/路径", "title": "春季活动",
      "clicks": 0, "active": true, "state": "ok",
      "created_at": "2026-07-18 09:30:00", "expires_at": "2027-07-18 09:30:00"
    }
  }
}

校验签名

每次投递都会带上以下请求头: X-Quik-Event (事件名称), X-Quik-Signaturesha256=HMAC_SHA256(body, secret). 密钥仅在创建回调时显示一次。校验签名时务必基于原始请求体,并使用恒定时间比较:

<?php
// PHP — 对原始请求体(raw body)验证签名
$payload   = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_QUIK_SIGNATURE'] ?? '';
$expected  = 'sha256=' . hash_hmac('sha256', $payload, $secret);

if (!hash_equals($expected, $signature)) {
    http_response_code(401);
    exit('invalid signature');
}
$event = json_decode($payload, true);
// $event['event'], $event['data'] ...
http_response_code(200);
// Node.js (Express) — 对原始请求体(raw body)验证签名
const crypto = require('crypto');

app.post('/quik-webhook', express.raw({ type: 'application/json' }), (req, res) => {
  const signature = req.get('X-Quik-Signature') || '';
  const expected  = 'sha256=' +
    crypto.createHmac('sha256', secret).update(req.body).digest('hex');

  const a = Buffer.from(expected), b = Buffer.from(signature);
  if (a.length !== b.length || !crypto.timingSafeEqual(a, b)) {
    return res.status(401).send('invalid signature');
  }
  const event = JSON.parse(req.body); // event.event, event.data ...
  res.sendStatus(200);
});

限制:Free 套餐 1 个、Pro 3 个、Business 10 个回调。接口地址必须是可公网访问的 http/https 地址(内网地址会被拦截)。

来领取你的API密钥
在控制台的 API 板块创建密钥,即刻上手。
获取API密钥