https://alterproduct.com/public-api/v1
在电商设置面板中创建 API 凭据。Access Token 仅显示一次,请立即将其存储到后端的密钥存储中。
将 Access Key 和 Access Token 保存在你的服务器上。需要身份验证的端点会拒绝包含 Origin 或 Referer 请求头的浏览器来源调用。
凭据可以设置权限范围。使用 GET /auth/check 验证当前店铺、套餐功能以及凭据返回的权限范围。
x-alter-access-key: YOUR_API_KEY
x-alter-access-token: YOUR_API_TOKEN
| 参数 | 必填 | 详情 |
|---|
x-alter-access-key | 是 | 公开的凭据标识符。 |
x-alter-access-token | 是 | 与访问密钥配对的秘密令牌。 |
x-alter-client-fingerprint | 否 | 可选的稳定指纹,用于限制嵌入会话请求频率。 |
Authorization | 仅限运行时 | 由 POST /embed/session 返回的 Bearer 令牌,供 /runtime/bootstrap 使用。 |
在正式集成中启用同步或嵌入功能之前,请使用身份验证检查端点。
GET https://alterproduct.com/public-api/v1/auth/check
请求示例(fetch)
const response = await fetch('https://alterproduct.com/public-api/v1/auth/check', {
method: 'GET',
headers: {
'x-alter-access-key': process.env.ALTER_ACCESS_KEY,
'x-alter-access-token': process.env.ALTER_ACCESS_TOKEN
}
});
const payload = await response.json();
if (!response.ok) {
throw new Error(payload?.code || payload?.error || `Alter API ${response.status}`);
}
console.log(payload);
响应示例
{
"ok": true,
"message": "success",
"storefrontId": 12,
"userOwnerId": 34,
"credentialId": 56,
"scopes": ["orders:read", "orders:write", "products:read"],
"plan": {
"requiredPlan": "Business",
"currentPlanName": "Business",
"eligible": true,
"runtimeFlags": {
"viewer": true,
"configurator": true,
"customizer": true
},
"limits": {
"activeRuntimeBindingsLimit": 100,
"monthlyReassignmentLimit": 1000,
"monthlyEmbedTokenLimit": 50000
}
}
}
下面的辅助函数供后续示例使用。它基于原生 fetch,可在 Node.js 18+ 或任何提供 fetch 的服务器运行时中运行。
const ALTER_API_BASE = 'https://alterproduct.com/public-api/v1';
const authHeaders = {
'x-alter-access-key': process.env.ALTER_ACCESS_KEY,
'x-alter-access-token': process.env.ALTER_ACCESS_TOKEN
};
async function alterFetch(path, options = {}) {
const response = await fetch(`${ALTER_API_BASE}${path}`, {
...options,
headers: {
...authHeaders,
...(options.body ? { 'Content-Type': 'application/json' } : {}),
...options.headers
}
});
const payload = await response.json().catch(() => null);
if (!response.ok) {
throw new Error(payload?.code || payload?.error || `Alter API ${response.status}`);
}
return payload;
}
大多数控制器错误会标准化为 code 响应。身份验证中间件和请求频率限制器可能改为返回 error 响应。
// Controller error
{
"code": "assetCatalog.invalidType"
}
// Auth middleware or rate limit
{
"error": "Unauthorized"
}
{
"error": "Too Many Requests"
}
| 类型 | 限额 | 时间窗口 |
|---|
全局 | 600 次请求 | 60 秒 |
GET /auth/check | 60 次请求 | 60 秒 |
订单读取/产品读取 | 300 次请求 | 60 秒 |
订单写入/嵌入会话/运行时绑定 | 120 次请求 | 60 秒 |
素材/设计导入读取 | 180 次请求 | 60 秒 |
字体 | 300 次请求 | 60 秒 |
WP 连接交换 | 30 次请求 | 60 秒 |
GET /model-generator/* | 600 次请求 | 60 秒 |