API - 概览

API - 连接与授权

配置API密钥、测试连接,并了解错误处理和请求限制。

端点概览

方法端点说明访问权限
GET/public-api/healthz服务健康检查。公开
GET/public-api/v1/auth/check验证凭据并返回店铺、权限范围和套餐功能。任何已验证身份的凭据

身份验证与基础 URL

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/check60 次请求60 秒
订单读取/产品读取300 次请求60 秒
订单写入/嵌入会话/运行时绑定120 次请求60 秒
素材/设计导入读取180 次请求60 秒
字体300 次请求60 秒
WP 连接交换30 次请求60 秒
GET /model-generator/*600 次请求60 秒