https://alterproduct.com/public-api/v1
EC 設定パネルで 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 秒 |