所有时间戳都是 Unix 毫秒。错误响应统一为 { "error": "<code>", "message": "<英文说明>" }。
- 资产(
assets.hash):不可变身份,字节一直保留,仅人工删除。不是公开外链。 - 分享链接(
links.hash):公开定位器;/<hash>/<filename>只解析链接 hash。 每条链接自有expires_at/ 吊销,互不影响。 - 上传会创建资产 + 第一条链接;响应里的
hash/url指这条链接,另有asset_hash。
hash 是 链接 定位器。filename 只影响 Content-Disposition。
- 支持
Range(206)、If-None-Match(304)、ETag、HEAD。 ?dl=1强制attachment;HTML/SVG/XML/JS 一律attachment。X-Content-Type-Options: nosniff、Content-Security-Policy: sandbox、CORS*。- 状态码:
200/206/304/404(无此链接、已吊销、资产已删)/410(链接过期)/403(来源被封禁)。
| 位置 | 名称 | 说明 |
|---|---|---|
| Header | Authorization: Bearer <上传密钥> |
也可用 X-Assets-Key |
| Header | Content-Type |
存储 MIME;缺省按扩展名推断 |
| Header | Content-Length |
必填 |
| Header/Query | X-Filename / ?filename= |
下载名 |
| Query | expires_in / ttl / expires_at / never |
首条链接 的过期(资产本身不过期) |
| Query | hash |
自定义 链接 hash(16–64 位 [A-Za-z0-9_-]) |
| Query | note / tags |
备注与标签(挂在资产上) |
| Query | project / project_id / Header X-Project |
归属项目(slug 或 id) |
{
"hash": "<link_hash>",
"asset_hash": "<asset_hash>",
"link_hash": "<link_hash>",
"filename": "demo.mp4",
"size": 1048576,
"content_type": "video/mp4",
"tags": ["demo"],
"project": { "id": "…", "slug": "coollearn", "name": "Cool Learn" },
"note": "季度报告终稿",
"created_at": 1789000000000,
"expires_at": 1789604800000,
"url": "https://assets.talkincode.net/<link_hash>/demo.mp4"
}{ "status": "ok", "service": "talkincode-assets", "time": … }
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /me |
身份;含 temp_link_max_seconds(14400) |
| GET | /stats |
总量;live/expired 按「是否还有有效链接」聚合 |
| GET | /assets |
列表:status=live|expired|deleted|all、kind、tag、project(slug/id/none)、q |
| POST | /assets/batch |
{hashes, tags?, tags_mode?, project?, create_links?, expires_in?/never?, label?} |
| GET | /assets/:assetHash |
详情 + links[] + 审计;含 editable_text / markdown / project |
| GET/POST | /assets/:assetHash/links |
列出 / 新建普通分享链接 |
| POST | /assets/:assetHash/temp-link |
临时链:{expires_in?},默认 1h,硬上限 4h |
| PATCH | /links/:linkHash |
改链接过期 / label |
| DELETE | /links/:linkHash |
吊销链接(不删资产) |
| GET/PUT | /assets/:assetHash/content |
文本/Markdown 原文读写(≤2 MiB) |
| PATCH | /assets/:assetHash |
{filename} / {note} / {tags} / {project}(slug/id/none) |
| DELETE | /assets/:assetHash |
软删(吊销全部链接);?purge=1 彻底删除 |
| POST | /assets/:assetHash/restore |
恢复资产(需重新建链才能外发) |
| GET | /tags |
有效资产上的标签计数 |
| GET/POST | /projects |
项目列表 / 创建 {slug, name?, note?} |
| GET/PATCH/DELETE | /projects/:idOrSlug |
详情 / 改名改 slug / 删除(资产改未归类) |
| GET/POST | /keys · DELETE /keys/:id |
上传密钥 |
| GET | /abuse · DELETE /abuse/:source |
封禁来源 |
| GET | /audit |
操作记录 |
| GET/PATCH | /settings |
default_ttl_days(新建链接默认)、max_upload_bytes、trash_retention_days |
# Agent:为已有资产开一条 ≤4h 的临时链
curl -sS -X POST "https://assets.talkincode.net/admin/api/assets/$ASSET_HASH/temp-link" \
-H "CF-Access-Client-Id: $CF_ACCESS_CLIENT_ID" \
-H "CF-Access-Client-Secret: $CF_ACCESS_CLIENT_SECRET" \
-H "Content-Type: application/json" \
-d '{"expires_in":"1h","label":"agent"}'每小时:清理回收站过期字节、过期封禁记录、旧审计。不会因链接过期删除 R2。