Richte API-Schlüssel ein, prüfe die Verbindung und lerne, wie du Fehler und Anfragelimits behandelst.
https://alterproduct.com/public-api/v1
Erstelle API-Zugangsdaten in den E-Commerce-Einstellungen. Das Access Token wird nur einmal angezeigt. Speichere es daher sofort im sicheren Geheimnisspeicher deines Backends.
Bewahre Access Key und Access Token auf deinem Server auf. Authentifizierte Endpunkte lehnen vom Browser ausgehende Aufrufe mit Origin- oder Referer-Headern ab.
Zugangsdaten können auf Berechtigungsbereiche beschränkt werden. Prüfe mit GET /auth/check den aktiven Shop, die Tarifmöglichkeiten und die für die Zugangsdaten zurückgegebenen Berechtigungsbereiche.
x-alter-access-key: YOUR_API_KEY
x-alter-access-token: YOUR_API_TOKEN
| Parameter | Erforderlich | Details |
|---|
x-alter-access-key | ja | Öffentliche Kennung der Zugangsdaten. |
x-alter-access-token | ja | Geheimes Token, das zum Zugriffsschlüssel gehört. |
x-alter-client-fingerprint | nein | Optionaler stabiler Fingerabdruck zur Begrenzung von Einbettungssitzungsanfragen. |
Authorization | nur Laufzeit | Von POST /embed/session zurückgegebenes Bearer-Token für /runtime/bootstrap. |
Nutze den Authentifizierungsendpunkt, bevor du Synchronisierung oder Einbettungsfunktionen in einer Live-Integration aktivierst.
GET https://alterproduct.com/public-api/v1/auth/check
Beispielanfrage (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);
Beispielantwort
{
"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
}
}
}
Die folgende Hilfsfunktion wird in den weiteren Beispielen verwendet. Sie nutzt einfaches fetch und läuft in Node.js 18+ oder jeder Serverlaufzeit, die fetch bereitstellt.
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;
}
Die meisten Controller-Fehler werden als Antwort mit code vereinheitlicht. Authentifizierungs-Middleware und Anfragelimiter können stattdessen eine Antwort mit error zurückgeben.
// Controller error
{
"code": "assetCatalog.invalidType"
}
// Auth middleware or rate limit
{
"error": "Unauthorized"
}
{
"error": "Too Many Requests"
}
| Typ | Limit | Zeitfenster |
|---|
Global | 600 Anfragen | 60 Sekunden |
GET /auth/check | 60 Anfragen | 60 Sekunden |
Bestellungen lesen/Produkte lesen | 300 Anfragen | 60 Sekunden |
Bestellungen schreiben/Einbettungssitzungen/Laufzeitzuordnungen | 120 Anfragen | 60 Sekunden |
Assets/Designimporte lesen | 180 Anfragen | 60 Sekunden |
Schriftarten | 300 Anfragen | 60 Sekunden |
WP-Verbindungsaustausch | 30 Anfragen | 60 Sekunden |
GET /model-generator/* | 600 Anfragen | 60 Sekunden |