端点

列出你的应用

你的密钥能看到的应用,最新的在前,支持搜索和分页。

GEThttps://www.setherion.com/api/v1/projects

套餐: 所有套餐

返回你仪表盘上的应用:你自己的、你所在工作区中的,以及与你共享的,最近更改的排在最前。已删除的应用不包括在内。任何角色都可以,查看者也一样。

应用每次返回 100 个。total 告诉你有多少个匹配,后面还有更多时,truncated 为 true,nextOffset 说明下一页从哪里开始。想找某一个应用而不必读完所有应用,可以用 q 搜索。

列出应用是免费的,不会用到积分。

请求

bash
curl https://www.setherion.com/api/v1/projects \
  -H "Authorization: Bearer $SETHERION_API_KEY"

要搜索,加上 q。它会在应用的名称或描述的任何位置匹配这些词,不区分大小写:

bash
curl "https://www.setherion.com/api/v1/projects?q=coffee" \
  -H "Authorization: Bearer $SETHERION_API_KEY"

要获取下一页,加上 offset,值为上一次响应中的 nextOffset:

bash
curl "https://www.setherion.com/api/v1/projects?offset=100" \
  -H "Authorization: Bearer $SETHERION_API_KEY"
参数含义
q可选。要在应用的名称或描述中查找的文字。前后的空格会被忽略。最多 100 个字符。其中的 % 或 _ 按字面处理,所以搜索 50% 不会匹配所有应用。
offset可选。这一页的起点,从 0 开始计数:即上一次响应中的 nextOffset。最多六位的整数。

排序依据是最近一次更改,应用的 id 用来决定相同时间的先后,所以在同一时刻更改的两个应用,在不同页之间永远不会互换位置。在两次请求页面之间被更改的应用会移到列表顶部,所以请一次性读完所有页面。

响应

一个应用超过 100 个的账户的第一页:

json
{
  "ok": true,
  "total": 142,
  "truncated": true,
  "offset": 0,
  "nextOffset": 100,
  "projects": [
    {
      "id": "7c1e4a52-9b0d-4f3e-8a61-2d5f0c9e7b14",
      "name": "Coffee shop",
      "description": "Website for a coffee shop in Leeds",
      "url": "https://coffee-shop.setherion.app",
      "updatedAt": "2026-09-19T10:42:07.000Z"
    },
    {
      "id": "0e9d3b6a-41c2-4d7f-b8a5-6f1c2a9d4e30",
      "name": "Booking tool",
      "description": null,
      "url": null,
      "updatedAt": "2026-09-18T16:03:51.000Z"
    }
  ]
}

(projects 数组最多包含 100 项,这里只显示了两项。)

字段类型含义
totalnumber匹配的应用数量,包括不在这一页上的。
truncatedboolean这一页之后还有更多应用时为 true。
offsetnumber这一页的起点。
nextOffsetnumber or null下一页的起点,最后一页上为 null。
idstring应用的 id。用它来修改或发布应用。
namestring应用的名称,与你仪表盘上的一致。
descriptionstring or null应用的描述,如果有的话。
urlstring or null应用上线的地址,未发布时为 null。
updatedAtstring应用最近一次更改的时间,采用 ISO 8601 格式。

超出末尾的页面不算错误:它返回 ok: true 和一个空的 projects 列表。

读取所有页面

js
const base = 'https://www.setherion.com/api/v1/projects'
const headers = { Authorization: `Bearer ${process.env.SETHERION_API_KEY}` }

let offset = 0
const all = []
while (offset !== null) {
  const page = await fetch(`${base}?offset=${offset}`, { headers }).then(r => r.json())
  if (!page.ok) throw new Error(page.error)
  all.push(...page.projects)
  offset = page.nextOffset
}

错误

状态码何时出现
400q 超过 100 个字符,或 offset 不是整数。
401密钥缺失、错误或已被撤销。
500无法读取列表。再试一次。
确切的提示语
状态码error
400q is at most 100 characters.
400offset is a whole number, 0 or more.
500Could not list your apps.

这个页面对你有帮助吗?

加入社区

提问、交流想法,看看别人在构建什么。