身份验证
身份验证
API Key
- 所有 MuAPI AI API 都需要使用 API key 进行身份验证。所有 API 调用都必须在请求头中包含你的 API key:
获取 API Key
获取 API key:
- 前往 MuAPI AI 控制台。
- 登录账户,或创建新账户。
- 进入 API Keys 页面。
- 生成新的 API key。
- 复制并安全保存 API key。
沙盒 Key 与生产 Key
创建 Key 时,可以选择创建沙盒(测试)Key:
- 生产 Key: 普通 Key,会消耗积分并处理真实任务。
- 沙盒 Key: 控制台中带有 Sandbox 标记的特殊 Key,用于免费测试集成,并立即返回模拟数据。
[!TIP] 开发期间始终使用沙盒 Key,避免意外消耗积分。
OAuth 2.0(Agent 与机器客户端)
对于 Agent 和其他机器客户端,MuAPI 还支持 OAuth 2.0 的 client_credentials 授权模式 — 这是普通 API key 之外的一种有作用域、短时有效的凭据。当你希望将凭据交给第三方或自主 Agent,又不想授予其完整且不受限制的账户访问权限时,可以使用此模式。
- 创建 OAuth 客户端:调用 POST https://api.muapi.ai/oauth/clients。该请求需要会话身份验证 — 应从自己已登录的浏览器会话发起,而不是使用 API key,并提交 name 和希望授予的 scopes。接口会返回 client_id 和 client_secret;Secret 只显示一次,请像 API key 一样保存。
- 换取访问令牌:调用 POST https://api.muapi.ai/oauth/token,提交 grant_type=client_credentials、client_id、client_secret 以及可选的 scope(以空格分隔;默认使用该客户端被允许的全部作用域)。
- 将返回的 access_token 像 API key 一样使用:Authorization: Bearer <access_token>。令牌 1 小时后过期,过期后重新申请。
可用作用域 — 通过 GET /oauth/scopes 查看实时、机器可读的列表:
| 作用域 | 权限 |
|---|---|
| generate:write | 提交图像、视频、音频、3D 等生成请求并消耗积分。 |
| generate:read | 轮询预测状态并获取输出。 |
| files:write | 将媒体上传到 MuAPI 托管的存储。 |
| account:read | 读取钱包余额、用量以及账户/方案信息。 |
| keys:manage | 创建、列出和撤销 API key 与 OAuth 客户端。 |
客户端只能请求创建时授予它的作用域。你可以在单个令牌中请求比客户端完整 allowed_scopes 更窄的 scope,实现最小权限原则。例如,只为只读 Agent 授予 generate:read account:read。
使用 DELETE /oauth/clients/{id} 撤销客户端 — 这会立即使它的所有现有访问令牌失效,而不必等到令牌自身的 1 小时有效期结束。
OAuth 客户端库和 Agent 扫描器所需的发现元数据发布在: https://muapi.ai/.well-known/oauth-authorization-server(RFC 8414)和 https://muapi.ai/.well-known/oauth-protected-resource(RFC 9728)。
[!NOTE] 这只支持机器到机器的身份验证 — 没有用户登录/授权同意界面(authorization_code 授权模式)。如果你要为终端用户构建“使用 Muapi 登录”流程,目前还不支持。
安全最佳实践
- 永远不要分享 API key: 妥善保密。
- 不要将 API key 硬编码: 使用环境变量或安全的密钥管理系统。
- 定期轮换 Key: 定期生成新的 API key,并停用旧 Key。
- 使用受限 Key: 条件允许时,创建权限受限的 Key。
- 妥善保存: API key 只会显示一次,请复制并安全存储。之后无法再次找回。
使用示例
1. cURL
curl --location --request POST 'https://muapi.ai/api/v1/endpoint' \
--header "Content-Type: application/json" \
--header "x-api-key: {MUAPIAPP_API_KEY}" \
--data-raw '{"param1": "value1", "param2": "value2"}
2. Python
import requests
import json
headers = {
"x-api-key": f"{MUAPIAPP_API_KEY}",
"Content-Type": "application/json"
}
payload = {
"param1": "value1",
"param2": "value2"
}
response = requests.post("https://api.muapi.ai/api/v1/endpoint", json=payload, headers=headers)
print(response.json())
3. Javascript
const apiKey = process.env.MUAPIAPP_API_KEY;
const headers = {
'x-api-key': `${apiKey}`,
'Content-Type': 'application/json'
};
const payload = {
param1: 'value1',
param2: 'value2'
};
fetch('https://muapi.ai/api/v1/endpoint', {
method: 'POST',
headers: headers,
body: JSON.stringify(payload)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));