Skip to content

Repository files navigation

cursor-api

说明

  • 当前版本已稳定,若发现响应出现缺字漏字,与本程序无关。
  • 若发现首字慢,与本程序无关。
  • 若发现响应出现乱码,也与本程序无关。
  • 属于官方的问题,请不要像作者反馈。
  • 本程序拥有堪比客户端原本的速度,甚至可能更快。
  • 本程序的性能是非常厉害的。
  • 根据本项目开源协议,Fork的项目不能以作者的名义进行任何形式的宣传、推广或声明。

获取key

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

配置说明

环境变量

  • PORT: 服务器端口号(默认:3000)
  • AUTH_TOKEN: 认证令牌(必须,用于API认证)
  • ROUTE_PREFIX: 路由前缀(可选)
  • TOKEN_LIST_FILE: token列表文件路径(默认:.tokens)

更多请查看 /env-example

Token文件格式

.tokens 文件:每行为token和checksum的对应关系:

# 这里的#表示这行在下次读取要删除
token1,checksum1
token2,checksum2

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

  • 需要删除某个 token
  • 需要使用已有 checksum 来对应某一个 token

模型列表

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

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
deepseek-v3
deepseek-r1

接口说明

基础对话

  • 接口地址: /v1/chat/completions
  • 请求方法: POST
  • 认证方式: Bearer Token
    1. 使用环境变量 AUTH_TOKEN 进行认证
    2. 使用 .token 文件中的令牌列表进行轮询认证
    3. 在v0.1.3-rc.3支持直接使用 token,checksum 进行认证,但未提供配置关闭

请求格式

{
"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信息管理页面

  • 接口地址: /tokens
  • 请求方法: GET
  • 响应格式: HTML页面
  • 功能: 调用下面的各种相关API的示例页面

获取Token信息

  • 接口地址: /tokens/get
  • 请求方法: POST
  • 认证方式: Bearer Token
  • 响应格式:
{
"status": "success",
"tokens": [
{
"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
}
}
}
],
"tokens_count": number
}

重载Token信息

  • 接口地址: /tokens/reload
  • 请求方法: POST
  • 认证方式: Bearer Token
  • 响应格式:
{
"status": "success",
"tokens_count": number,"message": "Token list has been reloaded"
}

更新Token信息

  • 接口地址: /tokens/update
  • 请求方法: POST
  • 认证方式: Bearer Token
  • 请求格式:
{
"tokens": "string"// token列表内容,将会直接覆盖 token_list 文件
}
  • 响应格式:
{
"status": "success",
"tokens_count": number,"message": "Token files have been updated and reloaded"
}

添加Token

  • 接口地址: /tokens/add
  • 请求方法: POST
  • 认证方式: Bearer Token
  • 请求格式:
[
{
"token": "string",
"checksum": "string"// 可选,如果不提供将自动生成
}
]
  • 响应格式:
{
"status": "success",
"tokens_count": number,"message": "string"// "New tokens have been added and reloaded" 或 "No new tokens were added"
}

删除Token

  • 接口地址: /tokens/delete
  • 请求方法: POST
  • 认证方式: Bearer Token
  • 请求格式:
{
"tokens": ["string"], // 要删除的token列表"expectation": "simple"| "updated_tokens" | "failed_tokens" | "detailed" // 默认为simple
}
  • 响应格式:
{
"status": "success",
"updated_tokens": ["string"], // 可选,根据expectation返回,表示更新后的token列表"failed_tokens": ["string"] // 可选,根据expectation返回,表示未找到的token列表
}
  • expectation说明:
    • simple: 只返回基本状态
    • updated_tokens: 返回更新后的token列表
    • failed_tokens: 返回未找到的token列表
    • detailed: 返回完整信息(包括updated_tokens和failed_tokens)

构建API Key

  • 接口地址: /build-key
  • 请求方法: POST
  • 认证方式: Bearer Token (当SHARE_AUTH_TOKEN启用时需要)
  • 请求格式:
{
"auth_token": "string", // 格式: {token},{checksum}
"disable_vision": boolean, // 可选,禁用图片处理能力"enable_slow_pool": boolean, // 可选,启用慢速池"usage_check_models": { // 可选,使用量检查模型配置"type": "default"| "disabled" | "all" | "custom","model_ids": "string"// 当type为custom时生效,以逗号分隔的模型ID列表
},
"include_web_references": boolean}
  • 响应格式:
{
"key": "string"// 成功时返回生成的key
}

或出错时:

{
"error": "string"// 错误信息
}

说明:

  1. 此接口用于生成携带动态配置的API Key,是对直接传token与checksum模式的升级版本

  2. API Key特性对比:

优势劣势
提取关键信息,生成更短的密钥可能存在版本兼容性问题
支持携带自定义配置增加了程序复杂度
采用非常规编码方式,提升安全性
更容易验证Key的合法性
取消预校验带来轻微性能提升
  1. 生成的key格式为: sk-{encoded_config},其中sk-为默认前缀(可配置)

  2. auth_token的格式为: {token},{checksum},其中,为默认分隔符(可配置)

  3. usage_check_models配置说明:

    • default: 使用默认模型列表(同下 usage_check_models 字段的默认值)
    • disabled: 禁用使用量检查
    • all: 检查所有可用模型
    • custom: 使用自定义模型列表(需在model_ids中指定)

配置管理接口

配置页面

  • 接口地址: /config
  • 请求方法: GET
  • 响应格式: HTML页面
  • 功能: 提供配置管理界面,可以修改页面内容和系统配置

更新配置

  • 接口地址: /config
  • 请求方法: POST
  • 认证方式: Bearer Token
  • 请求格式:
{
"action": "get"| "update" | "reset","path": "string",
"content": {
"type": "default"| "text" | "html","content": "string"
},
"vision_ability": "none"| "base64" | "all", // "disabled" | "base64-only" | "base64-http""enable_slow_pool": boolean,"enable_all_claude": boolean,"usage_check_models": {
"type": "none"| "default" | "all" | "list","content": "string"
},
"enable_dynamic_key": boolean,"share_token": "string",
"proxies": ""| "system" | "proxy1,proxy2,...","include_web_references": boolean
}
  • 响应格式:
{
"status": "success",
"message": "string",
"data": {
"page_content": {
"type": "default"| "text" | "html", // 对于js和css后两者是一样的"content": "string"
},
"vision_ability": "none"| "base64" | "all","enable_slow_pool": boolean,"enable_all_claude": boolean,"usage_check_models": {
"type": "none"| "default" | "all" | "list","content": "string"
},
"enable_dynamic_key": boolean,"share_token": "string",
"proxies": ""| "system" | "proxy1,proxy2,...","include_web_references": boolean
}
}

注意:usage_check_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"
}

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

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

静态资源接口

获取共享样式

  • 接口地址: /static/shared-styles.css
  • 请求方法: GET
  • 响应格式: CSS文件
  • 功能: 获取共享样式表

获取共享脚本

  • 接口地址: /static/shared.js
  • 请求方法: GET
  • 响应格式: JavaScript文件
  • 功能: 获取共享JavaScript代码

环境变量示例

  • 接口地址: /env-example
  • 请求方法: GET
  • 响应格式: 文本文件
  • 功能: 获取环境变量配置示例

其他接口

获取模型列表

  • 接口地址: /v1/models
  • 请求方法: GET
  • 响应格式:
{
"object": "list",
"data": [
{
"id": "string",
"object": "model",
"created": number,"owned_by": "string"
}
]
}

获取一个随机hash

  • 接口地址: /get-hash
  • 请求方法: GET
  • 响应格式:
string

获取或修复checksum

  • 接口地址: /get-checksum
  • 请求方法: GET
  • 请求参数:
    • checksum: 可选,用于修复的旧版本生成的checksum,也可只传入前8个字符;可用来自动刷新时间戳头
  • 响应格式:
string

说明:

  • 如果不提供checksum参数,将生成一个新的随机checksum
  • 如果提供checksum参数,将尝试修复旧版本的checksum以适配v0.1.3-rc.3之后的版本使用,修复失败会返回新的checksum;若输入的checksum本来就有效,则返回更新tsheader后的checksum

获取当前的tsheader

  • 接口地址: /get-tsheader
  • 请求方法: GET
  • 响应格式:
string

健康检查接口

  • 接口地址: /health/(重定向)
  • 请求方法: GET
  • 认证方式: Bearer Token(可选)
  • 响应格式: 根据配置返回不同的内容类型(默认、文本或HTML),默认JSON
{
"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 时才会返回。否则,该字段将被省略。

获取日志接口

  • 接口地址: /logs
  • 请求方法: GET
  • 响应格式: 根据配置返回不同的内容类型(默认、文本或HTML)

获取日志数据

  • 接口地址: /logs
  • 请求方法: POST
  • 认证方式: Bearer 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"
}

获取用户信息

  • 接口地址: /userinfo
  • 请求方法: POST
  • 认证方式: 请求体中包含token
  • 请求格式:
{
"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"
}

基础校准

  • 接口地址: /basic-calibration
  • 请求方法: POST
  • 认证方式: 请求体中包含token
  • 请求格式:
{
"token": "string"
}
  • 响应格式:
{
"status": "success"| "error","message": "string",
"user_id": "string",
"create_at": "string",
"checksum_time": number
}

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

项目相关工具

获取token

  • 使用 get-token 获取读取当前用户token,仅支持windows、linux与macos

重置遥测数据

  • 使用 reset-telemetry 重置当前用户遥测数据,仅支持windows、linux与macos

鸣谢

感谢以下项目和贡献者:

偷偷写在最后的话

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

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

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

  • 测试版更新
  • 要求功能
  • 问题更快解决

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

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

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

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

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

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

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

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

要不给我邮箱发口令红包?休息休息

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages