cursor-api

说明

获取key

  1. 访问 www.cursor.com 并完成注册登录
  2. 在浏览器中打开开发者工具(F12)
  3. 在 Application-Cookies 中查找名为 WorkosCursorSessionToken 的条目,并复制其第三个字段。请注意,%3A%3A 是 :: 的 URL 编码形式,cookie 的值使用冒号 (:) 进行分隔。

配置说明

环境变量

更多请查看 /env-example

Token文件格式

  1. .token 文件:每行一个token,支持以下格式:

    # 这是注释
    token1
    # alias与标签的作用差不多
    alias::token2
    

    alias 可以是任意值,用于区分不同的 token,更方便管理,WorkosCursorSessionToken 是相同格式
    该文件将自动向.token-list文件中追加token,同时自动生成checksum

  2. .token-list 文件:每行为token和checksum的对应关系:

    # 这里的#表示这行在下次读取要删除
    token1,checksum1
    # alias被舍弃,会自动删除最后一个:或%3A的后一位前的所有内容
    token2,checksum2
    

    该文件可以被自动管理,但用户仅可在确认自己拥有修改能力时修改,一般仅有以下情况需要手动修改:

模型列表

写死了,后续也不会会支持自定义模型列表

claude-3.5-sonnet
gpt-4
gpt-4o
claude-3-opus
cursor-fast
cursor-small
gpt-3.5-turbo
gpt-4-turbo-2024-04-09
gpt-4o-128k
gemini-1.5-flash-500k
claude-3-haiku-200k
claude-3-5-sonnet-200k
claude-3-5-sonnet-20241022
gpt-4o-mini
o1-mini
o1-preview
o1
claude-3.5-haiku
gemini-exp-1206
gemini-2.0-flash-thinking-exp
gemini-2.0-flash-exp

接口说明

基础对话

请求格式

{
  "model": "string",
  "messages": [
    {
      "role": "system" | "user" | "assistant", // 也可以是 "developer" | "human" | "ai"
      "content": "string" | [
        {
          "type": "text" | "image_url",
          "text": "string",
          "image_url": {
            "url": "string"
          }
        }
      ]
    }
  ],
  "stream": boolean
}

响应格式

如果 streamfalse:

{
  "id": "string",
  "object": "chat.completion",
  "created": number,
  "model": "string",
  "choices": [
    {
      "index": number,
      "message": {
        "role": "assistant",
        "content": "string"
      },
      "finish_reason": "stop" | "length"
    }
  ],
  "usage": {
    "prompt_tokens": 0,
    "completion_tokens": 0,
    "total_tokens": 0
  }
}

不进行 tokens 计算主要是担心性能问题。

如果 streamtrue:

data: {"id":"string","object":"chat.completion.chunk","created":number,"model":"string","choices":[{"index":number,"delta":{"role":"assistant","content":"string"},"finish_reason":null}]}

data: {"id":"string","object":"chat.completion.chunk","created":number,"model":"string","choices":[{"index":number,"delta":{"content":"string"},"finish_reason":null}]}

data: {"id":"string","object":"chat.completion.chunk","created":number,"model":"string","choices":[{"index":number,"delta":{},"finish_reason":"stop"}]}

data: [DONE]

Token管理接口

简易Token信息管理页面

更新Token信息 (GET)

{
  "status": "success",
  "message": "Token list has been reloaded"
}

更新Token信息 (POST)

{
  "tokens": "string",
  "token_list": "string"
}
{
  "status": "success",
  "token_file": "string",
  "token_list_file": "string",
  "tokens_count": number,
  "message": "Token files have been updated and reloaded"
}

获取Token信息

{
  "status": "success",
  "token_file": "string",
  "token_list_file": "string",
  "tokens": "string",
  "tokens_count": number,
  "token_list": "string"
}

配置管理接口

配置页面

更新配置

{
  "action": "get" | "update" | "reset",
  "path": "string",
  "content": {
    "type": "default" | "text" | "html",
    "content": "string"
  },
  "enable_stream_check": boolean,
  "include_stop_stream": boolean,
  "vision_ability": "none" | "base64" | "all", // "disabled" | "base64-only" | "base64-http"
  "enable_slow_pool": boolean,
  "enable_all_claude": boolean,
  "check_usage_models": {
    "type": "none" | "default" | "all" | "list",
    "content": "string"
  }
}
{
  "status": "success",
  "message": "string",
  "data": {
    "page_content": {
      "type": "default" | "text" | "html", // 对于js和css后两者是一样的
      "content": "string"
    },
    "enable_stream_check": boolean,
    "include_stop_stream": boolean,
    "vision_ability": "none" | "base64" | "all",
    "enable_slow_pool": boolean,
    "enable_all_claude": boolean,
    "check_usage_models": {
      "type": "none" | "default" | "all" | "list",
      "content": "string"
    }
  }
}

注意:check_usage_models 字段的默认值为:

{
  "type": "default",
  "content": "claude-3-5-sonnet-20241022,claude-3.5-sonnet,gemini-exp-1206,gpt-4,gpt-4-turbo-2024-04-09,gpt-4o,claude-3.5-haiku,gpt-4o-128k,gemini-1.5-flash-500k,claude-3-haiku-200k,claude-3-5-sonnet-200k"
}

这些模型将默认进行使用量检查。您可以通过配置接口修改此设置。

路径修改注意:选择类型再修改文本,否则选择默认时内容的修改无效,在更新配置后自动被覆盖导致内容丢失,自行改进。

静态资源接口

获取共享样式

获取共享脚本

环境变量示例

其他接口

获取模型列表

{
  "object": "list",
  "data": [
    {
      "id": "string",
      "object": "model",
      "created": number,
      "owned_by": "string"
    }
  ]
}

获取一个随机hash

string

获取或修复checksum

string

说明:

获取当前的tsheader

string

健康检查接口

{
  "status": "success",
  "version": "string",
  "uptime": number,
  "stats": {
    "started": "string",
    "total_requests": number,
    "active_requests": number,
    "system": {
      "memory": {
        "rss": number
      },
      "cpu": {
        "usage": number
      }
    }
  },
  "models": ["string"],
  "endpoints": ["string"]
}

注意:stats 字段仅在请求头中包含正确的 AUTH_TOKEN 时才会返回。否则,该字段将被省略。

获取日志接口

获取日志数据

{
  "total": number,
  "logs": [
    {
      "id": number,
      "timestamp": "string",
      "model": "string",
      "token_info": {
        "token": "string",
        "checksum": "string",
        "profile": {
          "usage": {
            "premium": {
              "requests": number,
              "requests_total": number,
              "tokens": number,
              "max_requests": number,
              "max_tokens": number
            },
            "standard": {
              "requests": number,
              "requests_total": number,
              "tokens": number,
              "max_requests": number,
              "max_tokens": number
            },
            "unknown": {
              "requests": number,
              "requests_total": number,
              "tokens": number,
              "max_requests": number,
              "max_tokens": number
            }
          },
          "user": {
            "email": "string",
            "name": "string",
            "id": "string",
            "updated_at": "string"
          },
          "stripe": {
            "membership_type": "free" | "free_trial" | "pro" | "enterprise",
            "payment_id": "string",
            "days_remaining_on_trial": number
          }
        }
      },
      "prompt": "string",
      "timing": {
        "total": number,
        "first": number
      },
      "stream": boolean,
      "status": "string",
      "error": "string"
    }
  ],
  "timestamp": "string",
  "status": "success"
}

获取用户信息

{
  "token": "string"
}
{
  "usage": {
    "premium": {
      "requests": number,
      "requests_total": number,
      "tokens": number,
      "max_requests": number,
      "max_tokens": number
    },
    "standard": {
      "requests": number,
      "requests_total": number,
      "tokens": number,
      "max_requests": number,
      "max_tokens": number
    },
    "unknown": {
      "requests": number,
      "requests_total": number,
      "tokens": number,
      "max_requests": number,
      "max_tokens": number
    }
  },
  "user": {
    "email": "string",
    "name": "string",
    "id": "string",
    "updated_at": "string"
  },
  "stripe": {
    "membership_type": "free" | "free_trial" | "pro" | "enterprise",
    "payment_id": "string",
    "days_remaining_on_trial": number
  }
}

如果发生错误,响应格式为:

{
  "error": "string"
}

基础校准

{
  "token": "string"
}
{
  "status": "success" | "error",
  "message": "string",
  "user_id": "string",
  "create_at": "string",
  "checksum_time": number
}

注意: user_id, create_at, 和 checksum_time 字段在校验失败时可能不存在。

偷偷写在最后的话

虽然作者觉得收点钱合理,但不强求,要是主动自愿发我我肯定收(因为真有人这么做,虽然不是赞助),赞助很合理吧

不是主动自愿就算了,不是很缺,给了会很感动罢了。

虽然不是很建议你赞助,但如果你赞助了,大概可以:

即使如此,我也保留可以拒绝赞助和拒绝要求的权利。

求赞助还是有点不要脸了,接下来是吐槽:

辛辛苦苦做这个也不知道是为了谁,好累。其实还有很多功能可以做,比如直接传token支持配置(其实这个要专门做一个页面),这个作为rc.4的计划之一吧。

主要没想做用户管理,所以不存在是否接入LinuxDo的问题。虽然那个半成品公益版做好了就是了。

就说这么多,没啥可说的,不管那么多,做就完了。[doge] 自己想象吧。

为什么一直说要跑路呢?主要是有时Cursor的Claude太假了,堪比gpt-4o-mini,我对比发现真没啥差别,比以前差远了,无力了,所以不太想做了。我也感觉很奇怪。

查询额度会在一开始检测导致和完成时的额度有些差别,但是懒得改了,反正差别不大,对话也没响应内容,恰好完成了统一。

有人说少个二维码来着,还是算了。如果觉得好用,给点支持。其实没啥大不了的,没兴趣就不做了。不想那么多了。